chromedriver有时关闭,有时不关闭

lpwwtiir  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(521)

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

ajsxfq5m1#

我注意到的一些事情可能对解决您的问题有帮助,也可能没有帮助:
除非你真的需要,否则最好打电话 driver = get_chromedriver() 在循环之外,运行 driver.quit() 循环完成后,这将大大加快执行速度,因为浏览器无需重新打开。但是,如果要访问同一网站的多个示例,则可能需要依赖于您的方法。 driver.quit() 应足以供您使用,而无需 driver.close() 在这里
如果您确实想使用多个示例,那么最好使用线程。我听说过一些情况,如果在一次又一次地销毁/重新创建驱动程序时使用循环,可能会出现问题。

piok6c0g

piok6c0g2#

尝试按如下所示更改代码。您只需声明一次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() ,所有Windows- 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查找文本并将其与style属性进行比较?
如果以上所有建议都不起作用,请尝试在中关闭webdriver finally

相关问题