如何在页面完全加载之前点击元素并抓取数据?我的互联网连接非常糟糕,因此有时需要永久地加载页面,无论如何都在这周围?
答案 0 :(得分:13)
当您在本案中提到pageLoadStrategy
时,我们可以获取 pageLoadStrategy
属性的帮助。当Selenium默认加载页面/网址时,它会遵循默认配置, normal
设置为 Document readiness state
。 Selenium可以开始执行来自不同 Document readiness state
的下一行代码。目前,Selenium支持3种不同的 pageLoadStrategy
,我们可以通过 none
进行配置,如下所示:
eager
(未定义)normal
(页面变为互动)pageLoadStrategy
(完整页面加载)以下是配置 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"))
)
现在您可以在页面完全加载之前开始与元素进行交互!