【问题标题】:selenium WebDriverException: Message: unknown error: bad inspector message while extracting page source with ChromeDriver Chrome using Selenium Pythonselenium WebDriverException:消息:未知错误:使用 Selenium Python 使用 ChromeDriver Chrome 提取页面源时出现错误检查器消息
【发布时间】:2018-10-31 07:14:12
【问题描述】:

我正在抓取一个包含 100MB 大小的大页面的网站。

驱动设置:

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("window-size=1920,1080")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(executable_path="chromedriver",  chrome_options=chrome_options)

以下代码

html = driver.page_source

导致错误:

selenium WebDriverException: Message: unknown error: bad inspector message
(Session info: headless chrome=66.0.3359.181)
(Driver info: chromedriver=2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011),platform=Mac OS X 10.11.6 x86_64)

这不可能是我的笔记本电脑上的“内存不足”

【问题讨论】:

  • 你见过this吗?你试过其他浏览器吗?
  • 您的意思是该网站的页面总大小为 100 MB,还是一个网页大小为 100 MB?您能否提供一个示例来帮助重现该错误?

标签: python selenium google-chrome web-scraping selenium-chromedriver


【解决方案1】:

此错误消息...

selenium WebDriverException: Message: unknown error: bad inspector message

...暗示 ChromeDriver 在执行代码行时由于 JSON 编码/解码问题而无法解析一些非 UTF-8 字符:

html = driver.page_source

分析

参考 John Chen(所有者 - Google Chrome 的 WebDriver)在讨论中的comment Issue 1860: "WebDriverException: Message: unknown error: bad inspector message:" when attempting to get page_source 可能您的用例中网站的页面源包含 Unicode 字符点 @987654337 @ 这是一个无效字符。 Chrome 将其编码为\uFFFF,然后将其发送到 ChromeDriver,但 ChromeDriver 在解码时将其视为无效而拒绝。

John Chen(所有者 - Google Chrome 的 WebDriver)进一步added

JSON 编码发生在 DevTools 的协议布局中,就在结果发送回 ChromeDriver 之前。相关代码在https://cs.chromium.org/chromium/src/out/Debug/gen/v8/src/inspector/protocol/Protocol.cpp。特别是,escapeStringForJSON 函数负责对字符串进行编码。其实挺保守的。任何高于 126 的内容都以 \uXXXX 格式编码。 (注意Protocol.cpp是生成的文件,真正的来源是https://cs.chromium.org/chromium/src/v8/third_party/inspector_protocol/lib/Values_cpp.template。)

ChromeDriver 使用的 JSON 解析器出现错误。 \uXXXX 序列的解码发生在https://cs.chromium.org/chromium/src/base/json/json_parser.cc?l=564https://cs.chromium.org/chromium/src/base/json/json_parser.cc?l=670。解码转义序列后,解码器会拒绝任何不是有效 Unicode 字符的内容。

我注意到最近发生了一项更改,以防止 JSON 编码器发出无效的 Unicode 代码点:https://crrev.com/478900。不幸的是,该错误所涉及的代码不是使用 JSON 编码器,因此它不能直接帮助我们,但这表明我们并不是唯一受此类问题影响的人。


解决方案

此问题已解决在解码 chromedriver 中的无效 UTF 字符串时替换无效的 UTF-16 转义序列,因为 Web 平台测试可能使用不一定是 utf-16 字符的 ECMAScript 字符串,通过 revision /commit.

因此,一个快速的解决方案是确保以下内容并重新执行您的测试:


另类

作为替代方案,您可以使用 GeckoDriver / Firefox 组合,您可以在Chromedriver only supports characters in the BMP error while sending Emoji with ChromeDriver Chrome using Selenium Python to Tkinter's label() textbox

找到相关讨论

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2019-10-22
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2021-05-22
    相关资源
    最近更新 更多