代码之家  ›  专栏  ›  技术社区  ›  HelpASisterOut

Selenium Firefox WebDriver中的HTML未加载

  •  1
  • HelpASisterOut  · 技术社区  · 6 年前

    我正在尝试使用 Selenium Firefox (无头)驾驶员进入 python .

    我阅读了网页上的所有锚,逐一浏览。但我想让浏览器等待 Ajax 在移到另一页之前,对该页的调用将结束。

    我的代码如下:

    import time 
    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().FIREFOX
    caps["pageLoadStrategy"] = "eager"  #  complete
    
    options = Options()
    options.add_argument("--headless")
    
    url = "http://localhost:3000/"
    
    # Using Selenium's webdriver to open the page
    driver = webdriver.Firefox(desired_capabilities=caps,firefox_options=options)
    driver.get(url)
    urls = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, "a")))
    
    links = []
    
    for url in urls:
        links.append(url.get_attribute("href"))
    
    for link in links:
        print 'navigating to: ' + link
        driver.get(link)
        body = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, "p")))
        driver.execute_script("window.scrollTo(0,1000);")
        print(body)    
        driver.back()
    
    driver.quit()
    

    这条线 print(body) 是为了测试而添加的。它返回了无法理解的文本,而不是页面的实际HTML。以下是印刷文本的一部分:

    [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="e7dfa6b2-1ddf-438d-b562-1e2ac8416e07")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="6fe1ffb0-17a8-4b64-9166-691478a0bbd4")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="1f510a00-a587-4ae8-9ecf-dd4c90081a5a")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="c1bfb1cd-5ccf-42b6-ad4c-c1a70486cc98")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="be44db09-3948-48f1-8505-937db509a157")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="68f3c9f2-80b0-493e-a47f-ad69caceaa06")>, 
    

    这是什么原因造成的?

    我正在抓取的页面中的所有内容(与内容相关)都是静态的。

    2 回复  |  直到 6 年前
        1
  •  2
  •   undetected Selenium    6 年前

    presence_of_all_elements_located() Locator Strategy List

    body = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, "p")))
    

    body

    print(body) 
    

    [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="e7dfa6b2-1ddf-438d-b562-1e2ac8416e07")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="6fe1ffb0-17a8-4b64-9166-691478a0bbd4")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="1f510a00-a587-4ae8-9ecf-dd4c90081a5a")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="c1bfb1cd-5ccf-42b6-ad4c-c1a70486cc98")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="be44db09-3948-48f1-8505-937db509a157")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fb183e8b-ce36-47e7-a03e-d3aeea376304", element="68f3c9f2-80b0-493e-a47f-ad69caceaa06")>]
    

    <p> scrollIntoView

    body = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.TAG_NAME, "p")))
    for element in body:
        driver.execute_script("return arguments[0].scrollIntoView(true);", element)
        print(element.get_attribute("innerHTML"))
    
        2
  •  2
  •   Andrei Suvorkov    6 年前

    for node in body: 
        print(node.get_attribute('innerHTML')) 
    

    innerHTML