python selenium chrome不同错误的冲突解决方案

时间:2021-04-17 23:28:30

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

一周左右的时间里,我遇到了一系列令人讨厌的 Selenium/Chrome 错误,一段时间内一切正常,然后突然就不行了。我的 chromedriver(89.0.4389.23) 版本适合我的 google chrome (89.0.4389.114) per google chrome official docs

目前我在运行 driver = webdriver.Chrome(options=options) 时遇到以下错误(至少在我的生产服务器上,我在本地机器上没有为相同的代码存储库获取它):

selenium.common.exceptions.SessionNotCreatedException: Message: session not created
from disconnected: unable to connect to renderer
  (Session info: headless chrome=89.0.4389.114)

令人沮丧的是,除了“确保您的 chrome 和 chromedriver 匹配”之外,我发现此错误的唯一 solution 是从我的网络驱动程序 options.add_argument("--remote-debugging-port=9222") 中删除 options。我也有那行代码,现在删除它似乎可以解决我的问题,但是我的代码库中的以下注释下出现了我的问题:

    # adding arg below fixed "DevToolsActivePort file doesn't exist."
    # ht https://github.com/heroku/heroku-buildpack-google-chrome/issues/46
    options.add_argument("--remote-debugging-port=9222")

所以我现在已经达到了一个完美的循环,我的 python selenium 代码可靠地工作,直到它可靠地中断,有两个不同的 selenium 错误(“会话未创建 从断开连接:无法连接到渲染器”或“DevToolsActivePort 文件不存在。”),其中一个解决方案是添加特定的代码行,另一个解决方案是将其删除。

以下是我当前的 launch_webdriver 函数,其中的注释反映了我一直在尝试导航的各种瞬态 chrome/selenium 错误:

from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.chrome.options import Options

def launch_browser(headless=False):  # :, driverpath="./spinocchio/chromedriver"):
    options = Options()

    # if any other driver `options` are added, they must be added BELOW no-sandbox
    # per user parsecer's comment at https://stackoverflow.com/a/53073789/1870832
    # and my own excruciating experience.
    options.add_argument("--no-sandbox")

    # you may think the two lines below can be replaced with just options.headless=headless
    # please don't.
    if headless:
        options.add_argument("headless")

    # adding arg below fixed "DevToolsActivePort file doesn't exist."
    # ht https://github.com/heroku/heroku-buildpack-google-chrome/issues/46
    options.add_argument("--remote-debugging-port=9222")
    driver = webdriver.Chrome(options=options)
    return driver

任何有关获得更可靠/更强大的帮助的帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

概述

  1. 普遍存在的问题 - 每 @ss7777
  2. 尽管导致此/相关的潜在原因很多

蓝色天空和“银弹”解决方案我很担心,但是,这里有一些常见的原因和潜在的解决方案/注意事项等。


修复/解决

(伴随着“共同性”的主旨观点|频率)

  1. 驱动程序:ChromeDriver 版本/文件位置 (~50%) - 不正确 版本 + 确保位置到可执行正确位置

“当您使用的二进制文件的版本不兼容时,这个问题非常明显。”(改编自 this 源,有用的历史版本摘要 v/二进制文件)

  1. Chrome/驱动程序仍然“活跃” 5-20% - 尽管关闭,进程树元素可以保持“活跃”或“旋转”一段时间 - 您是否在 PC 重新启动后立即注意到这一点 (here )?

(之前已经遭受过甚至证明了这一点 - 例如并行运行代码,或者只是通过 .bat 与 PyCharm 控制台同时执行)。

  1. 更新:插件/其他不兼容(约 5-15%) - 注意到您使用的是无头 - 它可以与头一起使用吗?)
  2. 系统:清理您的系统/还原点或最坏的一面(~10-20%)。 (恢复点对我有用)
  3. 其他:产生单独的线程(~5% - 参见 here)/替代端口(作为要求/可行)

解决方法

  • Chrome 依赖项(例如,请参阅 here - 尽管有潜在的红鲱鱼......)
  • 执行模式(通过编辑器主程序,通过编辑器托管的 CMD 界面(例如 PyCharm 控制台),或通过 .bat 文件(如前所述),Standalone Selenium here
  • 针对高级用户的配置(技术/高级 - 例如 here

未解决(尽管有承诺)

这种 Q 仍未解决/贡献有限的几种情况:

(虽然这里的第 2 点是指上面第 2 项中的补救措施)。


极端情况:

  • 经历过激烈的调查和许多过往的问答 - 最终结论是完全重新安装(Chrome/python、编辑器)等。

链接/相关

答案 1 :(得分:0)

我曾经遇到过同样的错误,但在任何地方都找不到可行的解决方案。所以我将我的 chrome 版本降级到 v86.0
即使您安装了旧版本的 chrome,您也需要禁用 chrome 更新以继续使用您想要的版本。您可以在此处找到步骤:https://www.webnots.com/7-ways-to-disable-automatic-chrome-update-in-windows-and-mac/
与较低的 bowser 版本一起,我使用以下代码:

def test_setup(self):
    chrome_options=Options()
    chrome_options.add_argument('--start-maximized')
    chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])
    chrome_options.add_argument("--remote-debugging-port=9222")
    chrome_options.add_argument('--no-sandbox')
    driver=webdriver.Chrome(executable_path="//your folder path//")

尝试一次,让我知道它是否适合您

答案 2 :(得分:0)

如果您收到此错误。
试试这个方法:

from webdriver_manager.chrome import ChromeDriverManager
options.add_argument("--restore-last-session")
options.add_argument("--disable-gaia-services")
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
<块引用> <块引用>

https://peter.sh/experiments/chromium-command-line-switches/

相关问题