我在Python中使用selenium ChromeDriver来执行一些网页抓取任务,我注意到有时候driver.get(url)
调用需要很长时间才能返回,尽管大部分页面已经加载(除了广告之外的所有内容)。
我试着通过设置一个小的page_load_timeout来修复它,但我不喜欢这个选项,因为选择一个数字是任意的。太长了,我的程序会永远运行下去,太短了,我关心的元素可能就不可用了。
有没有一种方法可以让driver.get(url)
在元素可点击时立即返回,或者我应该简单地设置一个微型page_load_timeout并依靠WebDriverWait
等待,直到我关心的元素可点击?如下所示:
self.driver = webdriver.Chrome(ChromeDriverManager().install(),
options=self._options)
self.driver.set_page_load_timeout(0)
try:
self.driver.get(url)
except (Timeout Exception):
pass
WebDriverWait(self.driver, timeout=30).until(
EC.element_to_be_clickable((by, val))).click()
我希望有一个更清晰的解决方案,比如:driver.get(url, WebDriverWait(EC.element_to_be_clickable((element))
1条答案
按热度按时间atmip9wb1#
你并不真的希望页面加载超时,因为如果超时了,你将无法做任何事情,只能使用另一个.get()。但是,你可以设置一个pageLoadStrategy:https://www.selenium.dev/documentation/webdriver/drivers/options/#pageloadstrategy...听起来你想要“eager”。如果你将它设置为“none”,你将完全依赖webdriverwaits来完成他们的工作。(DOM可能仍然在变化,这可能会导致陈旧元素的问题...)