ChromeDriver 有时会关闭,有时不会关闭



我试图实现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

我注意到的一些事情可能对解决您的问题有帮助,也可能没有帮助:

  1. 除非您真的需要,否则最好在循环外调用driver = get_chromedriver(),并在循环完成后运行driver.quit(),这将大大加快您的执行速度,因为您的浏览器不需要重新打开。然而,如果你正在访问同一网站的多个实例,那么你可能需要依赖于你的方法。

  2. driver.quit()应该足以供您使用,而无需在此使用driver.close()

  3. 如果您确实想使用多个实例,那么使用线程可能会更好。我听说过一些情况,如果在反复破坏/重新创建驱动程序时使用循环,可能会出现问题。

尝试按如下方式更改代码。您声明一次webdriver实例,然后使用driver.get打开浏览器url。

此外,我建议在退出webdriver之前附加所有值。

from selenium import webdriver
driver = get_chromedriver() # returns webdriver instance
addresses = ['address1', 'address2',...]
results = []
for address in addresses:
driver.get(f"https://www.example.com/{address}")
values = scrape_some_data()
results.append(values)
driver.close()
# do something with the list of values

driver.close((和driver.quit((之间的区别:

  • close((方法关闭当前窗口
  • quit((方法退出驱动程序并关闭所有关联的窗口

因此,如果您希望关闭一个窗口,请使用close(),所有窗口-quit()

我还建议:在关闭webdriver之前添加显式等待,等待加载所有数据。使用显式等待导入:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

使用类似:

wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "css_selector")))  # for a list of elements

举个例子:如何使用Selenium/Python查找并比较具有样式属性的文本?

如果以上所有建议都不起作用,请尝试关闭finally块中的Web驱动程序。

相关内容

  • 没有找到相关文章

最新更新