在Python中,selenium驱动程序是否需要等待URL返回?

klr1opcd  于 2023-04-13  发布在  Python
关注(0)|答案(1)|浏览(130)

我在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))

atmip9wb

atmip9wb1#

你并不真的希望页面加载超时,因为如果超时了,你将无法做任何事情,只能使用另一个.get()。但是,你可以设置一个pageLoadStrategy:https://www.selenium.dev/documentation/webdriver/drivers/options/#pageloadstrategy...听起来你想要“eager”。如果你将它设置为“none”,你将完全依赖webdriverwaits来完成他们的工作。(DOM可能仍然在变化,这可能会导致陈旧元素的问题...)

相关问题