不要在Python中使用Selenium等待页面加载

时间:2017-09-20 12:29:47

标签: python selenium selenium-webdriver webdriver pageloadstrategy

如何在页面完全加载之前点击元素并抓取数据?我的互联网连接非常糟糕,因此有时需要永久​​地加载页面,无论如何都在这周围?

2 个答案:

答案 0 :(得分:13)

当您在本案中提到pageLoadStrategy时,我们可以获取 pageLoadStrategy 属性的帮助。当Selenium默认加载页面/网址时,它会遵循默认配置, normal 设置为 Document readiness state 。 Selenium可以开始执行来自不同 Document readiness state 的下一行代码。目前,Selenium支持3种不同的 pageLoadStrategy ,我们可以通过 none 进行配置,如下所示:

  1. eager (未定义)
  2. normal (页面变为互动)
  3. pageLoadStrategy (完整页面加载)
  4. 以下是配置 from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities binary = r'C:\Program Files\Mozilla Firefox\firefox.exe' caps = DesiredCapabilities().FIREFOX # caps["pageLoadStrategy"] = "normal" # complete caps["pageLoadStrategy"] = "eager" # interactive # caps["pageLoadStrategy"] = "none" # undefined driver = webdriver.Firefox(capabilities=caps, firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe") driver.get("https://google.com")

    的代码块
    NO-Data

答案 1 :(得分:1)

对于Chromedriver,其工作原理与@DebanjanB的答案相同,但是“急切”的页面加载策略为not yet supported

因此,对于chromedriver,您会得到:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities().CHROME
# caps["pageLoadStrategy"] = "normal"  #  Waits for full page load
caps["pageLoadStrategy"] = "none"   # Do not wait for full page load
driver = webdriver.Chrome(desired_capabilities=caps, executable_path="path/to/chromedriver.exe")

请注意,在使用“无”策略时,您很可能必须实现自己的wait方法来检查是否加载了所需的元素。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

WebDriverWait(driver, timeout=10).until(
    ec.visibility_of_element_located((By.ID, "your_element_id"))
)

现在您可以在页面完全加载之前开始与元素进行交互!