gpt4 book ai didi

python - 循环中的 Selenium-chrome driver.get() 重复几次后会中断

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:42 29 4
gpt4 key购买 nike

我想从不断变化的网页中抓取数据(每隔几秒就有新帖子)。我在 while 循环中调用 driver.get() 但经过几次重复后我没有得到新结果。它不断地一遍又一遍地返回同一个帖子。我确定页面正在更改(在浏览器中检查)

我尝试使用 time.wait() 和 driver.refresh() 但问题仍然存在

    chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=self.cp.getSeleniumDriverPath())

while True:
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
posts = soup.find_all(some class)

(...)
some logic with the result
(...)

driver.refresh() #tried interchangably with driver.get() from the beginning of loop

据我所知,driver.get() 应该等待页面加载,然后再执行下一行代码。也许我在语言方面做了一些错误的事情(我对Python还很陌生)。我应该在每次循环运行时重置驱动程序的某些属性吗?我见过在这样的循环中使用 driver.get() 的解决方案,但它在我的情况下不起作用。如何强制驱动程序在抓取页面之前完全刷新页面?

最佳答案

当您尝试向窗口发送命令时,如果页面正在加载,

selenium 将出现错误。您应该实现一个 time.sleep() 或一些 selenium specific wait method以确保页面已准备好进行处理。类似的东西

import time

while True:
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
posts = soup.find_all(some class)

(...)
some logic with the result
(...)

driver.refresh()
time.sleep(5) # probably too long, but I usually try to stay on the safe side

最好的选择可能是使用类似的东西

element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)

从我发布的上面的链接中,这将确保该元素在那里,同时不会强制等待 5 秒。如果您想要的元素在 0.0001 秒内出现,您的脚本将在那么长时间后继续。这使您可以将超时设置为任意大(例如 120 秒),而不会影响执行速度。

关于python - 循环中的 Selenium-chrome driver.get() 重复几次后会中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56048653/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com