我试图实现selenium来从列表中删除页面。有时,在尝试刮取列表时,执行会停止。似乎有时候执行没有经过driver.close(),而是完全随机进行的。下面是我用来刮取多个页面的代码。
如果有人建议一种方法来确保在抓取数据后驱动程序关闭,我将不胜感激。
from selenium import webdriver
addresses = ['address1', 'address2',...]
results = []
for address in addresses:
driver = get_chromedriver() # returns webdriver instance
driver.get(f"https://www.example.com/{address}")
values = scrape_some_data()
driver.close()
driver.quit()
results.append(values)
# do something with the list of values
2条答案
按热度按时间ajsxfq5m1#
我注意到的一些事情可能对解决您的问题有帮助,也可能没有帮助:
除非你真的需要,否则最好打电话
driver = get_chromedriver()
在循环之外,运行driver.quit()
循环完成后,这将大大加快执行速度,因为浏览器无需重新打开。但是,如果要访问同一网站的多个示例,则可能需要依赖于您的方法。driver.quit()
应足以供您使用,而无需driver.close()
在这里如果您确实想使用多个示例,那么最好使用线程。我听说过一些情况,如果在一次又一次地销毁/重新创建驱动程序时使用循环,可能会出现问题。
piok6c0g2#
尝试按如下所示更改代码。您只需声明一次webdriver示例并使用
driver.get
打开浏览器url。另外,我建议在退出webdriver之前附加所有值。
driver.close()和driver.quit()之间的差异:
方法关闭当前窗口。
方法退出驱动程序并关闭每个相关窗口。
因此,如果您希望关闭一个窗口,请使用
close()
,所有Windows-quit()
我建议的另一件事是:在webdriver关闭之前添加显式等待,等待加载所有数据。要使用显式等待导入,请执行以下操作:并使用类似于:
以此为例:如何使用selenium/python查找文本并将其与style属性进行比较?
如果以上所有建议都不起作用,请尝试在中关闭webdriver
finally
块