【问题标题】:Python Selenium: Handling Webdriver exceptionPython Selenium:处理 Webdriver 异常
【发布时间】:2020-04-25 20:46:09
【问题描述】:

我正在使用 Beautfilsoup 从 Google Play 商店中提取应用相关信息。我正在提取应用程序名称、总体评分、没有人评价该应用程序以及评论者发布的评论。但是,当我运行程序时,它会引发 webdriver 异常例如:当程序尝试从该应用程序('https://play.google.com/store/apps/details?id=com.tudasoft.android.BeMakeup&hl=en&showAllReviews=true')中检索信息时,它会引发错误。这是我的代码:

import bs4 as bs
from selenium import webdriver 

driver = webdriver.Chrome(path)
driver.get(url)
soup = bs.BeautifulSoup(driver.page_source, 'html.parser')

我在第三行出现错误,错误的开始是:

---------------------------------------------------------------------------
WebDriverException                        Traceback (most recent call last)
<ipython-input-270-4e8a1ef443f2> in <module>()
----> 1 soup = bs.BeautifulSoup(driver.page_source, 'html.parser')

错误的结尾是:

(Session info: chrome=79.0.3945.88)
  (Driver info: chromedriver=2.41.578706 (5f725d1b4f0a4acbf5259df887244095596231db),platform=Mac OS X 10.15.2 x86_64) 

我尝试使用异常处理但没有解决问题谁能指导我如何克服这种情况?

【问题讨论】:

  • 如果您发现您的 Chrome 驱动程序 chromedriver=2.41.578706 和 chrome 版本 chrome=79.0.3945.88 不兼容。请先更新您的 chrome 驱动程序并重试。
  • 我认为问题在于评论中的表情符号。起初我遇到了错误,但是当我进入开发工具并删除那些表情符号时,它运行良好。不确定如何以编程方式解决该问题。我读了这个here

标签: python python-3.x selenium selenium-webdriver beautifulsoup


【解决方案1】:

此错误消息...

WebDriverException                        Traceback (most recent call last)
.
(Session info: chrome=79.0.3945.88)
  (Driver info: chromedriver=2.41.578706 (5f725d1b4f0a4acbf5259df887244095596231db),platform=Mac OS X 10.15.2 x86_64) 

...暗示 ChromeDriver 无法与 Browsing ContextChrome Browser 会话进行通信。

您的主要问题是您使用的二进制文件版本之间的不兼容性,如下所示:

  • 您正在使用 chromedriver=41.0
  • chromedriver=2.41 的发行说明明确提及以下内容:

支持 Chrome v67-69

  • 您正在使用 chrome=79.0
  • ChromeDriver v79.0 的发行说明明确提及以下内容:

支持Chrome 79版

所以 ChromeDriver v2.41Chrome 浏览器 v79.0

之间存在明显的不匹配

解决方案

确保:

  • Selenium 升级到当前级别 Version 3.141.59
  • ChromeDriver 已更新到当前的ChromeDriver v79.0.3945.36 级别。
  • Chrome 已更新至当前 Chrome 版本 79.0 级别。 (根据ChromeDriver v79.0 release notes
  • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
  • 仅适用于 Windows 操作系统)使用 CCleaner 工具在您的测试套件执行前后清除所有操作系统杂务。
  • 仅限 LinuxOSFree Up and Release the Unused/Cached Memory in Ubuntu/Linux Mint 在执行您的测试套件之前和之后。
  • 如果您的基础 Web Client 版本太旧,请卸载它并发布 Web Client 版本。
  • 进行系统重启
  • 非root用户身份执行@Test
  • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。

【讨论】:

  • 对于您提到的最后一点,如果我要检索多个 url(使用 for 循环),是否需要在循环结束时使用 driver.quit()(在加载新 url 之前)?
  • @user2293224 始终建议以更简洁的方式开始每个测试,即启动一个新的浏览上下文,在这些情况下,您可以轻松地driver.quit()。话虽如此,如果您的测试具有依赖性,您可能必须更改您的 Test Architecture 以重用现有会话。在这种情况下,您不能driver.quit()driver.quit() 的简短意义是降低内存使用率。
  • 我按照您的指示:更新了 chrome 驱动程序、selenium,并重新启动了系统。当我运行程序时,它会抛出相同的错误,但有一些不同的细节。这是错误消息的结尾:
  • (Session info: chrome=79.0.3945.88),这次没有打印webdriver的版本
  • @user2293224 太好了,所以我们已经解决了您在问题中提到的错误。我们不应该结束这个讨论并在一个新线程中讨论当前的错误吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
相关资源
最近更新 更多