当我运行循环时,最初的几次迭代(有时5次,有时15次,看起来很随机)工作得很好,但是由于某些原因,程序在某个时候会不确定地挂起
for url in links:
driver.get(url)
print(url)
li_elements = driver.find_elements(By.CLASS_NAME, "css-sfcl1s")
price_elements = driver.find_elements(By.CLASS_NAME, "css-t9ee1.er34gjf0")
#some job on python lists
字符串
这些网站是相似的,看起来像this
我尝试的是:
首先,我受到这个anwser的启发,使用driver.command_executor.set_timeout(10)
,但它并没有解决这个问题。
我尝试了结构,try & except ''像这样:
for url in links:
try:
driver.get(url)
print(url)
li_elements = driver.find_elements(By.CLASS_NAME, "css-sfcl1s")
price_elements = driver.find_elements(By.CLASS_NAME, "css-t9ee1.er34gjf0")
#some job on python lists
except:
print("error has occured")
driver.get(url)
print(url)
li_elements = driver.find_elements(By.CLASS_NAME, "css-sfcl1s")
price_elements = driver.find_elements(By.CLASS_NAME, "css-t9ee1.er34gjf0")
#some job on python lists
型
它确实在except块中执行了print函数,但它在driver.get(url)
处停止,并吐出关于sellenium的错误,如:
ReadTimeoutError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_16228\257283962.py in <module>
19 except:
20 print("error has occured")
---> 21 driver.get(url)
22 print(url)
23 li_elements = driver.find_elements(By.CLASS_NAME, "css-sfcl1s")
C:\Users\Public\anacondaa\lib\site-packages\selenium\webdriver\remote\webdriver.py in get(self, url)
351 def get(self, url: str) -> None:
352 """Loads a web page in the current browser session."""
--> 353 self.execute(Command.GET, {"url": url})
354
355 @property
型
重新启动webdriver似乎可以,但是在几次迭代后它仍然停止。因为我有大约900个站点要废弃,这不是一个可行的选择。
我曾想过用类似于li_elements = WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "css-sfcl1s")))
的东西来替换标准的li_elements = driver.find_elements(By.CLASS_NAME, "css-sfcl1s")
,但问题仍然存在。
有什么办法解决这个问题吗?
2条答案
按热度按时间cl25kdpy1#
我不知道是什么原因导致了你的问题,但如果我不得不猜测的话,我会说要么是错误的URL,要么是chromdriver在完成后没有关闭。尝试杀死现有的示例,看看是否能修复它。
1aaf6o9v2#
我想你可能误解了“try-except”是如何工作的。一旦异常被捕获,你就试图重复导致错误的步骤。在大多数情况下,它不会起作用。
你要做的是:
你应该/可能做的事情:
*不要再次尝试处理“损坏”的URL
代替
字符串
你应该只留下sth like:
型
您也可以打印异常消息,以了解是什么导致错误。