如何在页面完全加载之前让 selenium 点击元素并抓取数据?我的互联网连接非常糟糕,所以有时完全加载页面需要很长时间,这有什么问题吗?
问问题
16379 次
2 回答
34
ChromeDriver 77.0(支持 Chrome 版本 77)现在eager
支持pageLoadStrategy。
已解决的问题 1902:支持急切页面加载策略 [Pri-2]
正如您在这种情况下提到的问题,click on elements and scrape data before the page has fully loaded
我们可以借助属性pageLoadStrategy
。当 Selenium 默认加载页面/url 时,它遵循默认配置,pageLoadStrategy
设置为normal
. Selenium 可以从不同的Document readiness state
. 目前 Selenium 支持 3 种不同Document readiness state
的,我们可以通过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")
于 2017-09-21T08:32:31.020 回答
8
对于 Chromedriver,它的工作原理与@DebanjanB 的答案相同,但是尚不支持“渴望”页面加载策略
所以对于 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")
请注意,当使用“无”策略时,您很可能必须实现自己的等待方法来检查您需要的元素是否已加载。
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"))
)
现在您可以在页面完全加载之前开始与您的元素进行交互!
于 2019-05-07T08:13:20.207 回答