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



在页面完全加载之前,如何使硒单击元素和刮擦数据?我的互联网连接非常糟糕,因此有时会永远完全加载页面,无论如何是否存在?

用硒4(2024年7月7日)

更新

page_load_strategy

page_load_strategy现在是一个属性。因此,使用Selenium V 4.6 及以下的最小代码块 page_load_strategy

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
# options.page_load_strategy = 'none'
options.page_load_strategy = 'eager'
# options.page_load_strategy = 'normal'
driver = webdriver.Chrome(options=options)
driver.get("https://google.com")

Chromedriver 77.0 (支持Chrome版本77)现在支持 eager as pageloadstrategy 。。

解决问题1902:支持急切的页面加载策略[PRI-2]


当您提到click on elements and scrape data before the page has fully loaded的问题时,在这种情况下,我们可以帮助属性 pageLoadStrategy 。当Selenium默认加载页面/URL时,它遵循默认配置, pageLoadStrategy 设置为 normal 。硒可以从不同的 Document readiness state 开始执行下一行代码。当前,硒支持3个不同的 Document readiness state 我们可以通过 pageLoadStrategy 进行配置,如下所示:

  1. none (UNDEFENINE)
  2. eager (页面变为互动)
  3. normal (完成页面加载)

这是配置 pageLoadStrategy 的代码块:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
binary = r'C:Program FilesMozilla Firefoxfirefox.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")

更新2022:现在,Chromedriver支持了这种行为。请参阅 @未检测到的答案。如果您必须使用"无" pageloadstrategy(例如,如果您不想等待页面互动)。

)。

旧答案:

我们可以使用"无" pageloadstrategy并实现自定义等待功能,直到我们的特定元素可以相互作用。

初始化Chromedriver时,将Pageloadstrategy添加到所需的功能中:

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"] = "eager"  #  Waits for page to be interactive
caps["pageLoadStrategy"] = "none"   # Do not wait for full page load
driver = webdriver.Chrome(desired_capabilities=caps, executable_path="path/to/chromedriver.exe")

请注意,使用"无"策略时,您很可能必须实现自己的等待方法才能检查是否已加载所需的元素。

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"))
)

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

与使用Chrome的人相同。帽子。完美工作。加快了我的时间。

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"] = "eager"   # Do not wait for full page load
driver = webdriver.Chrome(desired_capabilities=caps, executable_path="path/to/chromedriver.exe")

相关内容

  • 没有找到相关文章

最新更新