首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >undetected_chromedriver需要比自动提供的更新的色度驱动程序版本。

undetected_chromedriver需要比自动提供的更新的色度驱动程序版本。
EN

Stack Overflow用户
提问于 2022-11-01 17:01:19
回答 1查看 125关注 0票数 0

在实例化一个新的未检出-显色剂 -实例之前,我确保通过这个职位中提到的python-chromedriver自动安装程序库安装了最新的python-chromedriver自动安装程序

代码语言:javascript
运行
复制
import chromedriver_autoinstaller
chromedriver_autoinstaller.install()

'C:\\Users\\username\\project_path\\lib\\site-packages\\chromedriver_autoinstaller\\106\\chromedriver.exe'

可以看到,它自动安装版本106,但是在错误消息中(由于意图通过UndetectedChromeDriver.Chrome(options=self._browser_options)实例化未检测到的Chrome驱动程序),它声明我需要下一个版本107

selenium.common.exceptions.WebDriverException:消息:未知错误:无法连接到铬127.0.0.1:.不创建会话:此版本的ChromeDriver仅支持ChromeDriver 107当前浏览器版本为

另一种自动安装所需色度驱动器的传统方法也不起作用:

代码语言:javascript
运行
复制
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import undetected_chromedriver as UndetectedChromeDriver

return UndetectedChromeDriver.Chrome(
    options=self._browser_options,
    service=ChromeService(ChromeDriverManager().install()))

我需要远程部署它,因此应该有一种方法可以自动获取和安装所需的ChromeDriver -版本。

带有跟踪的完整错误消息如下:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\username\project_path\lib\site-packages\undetected_chromedriver\__init__.py", line 103, in __init__
    def __init__(
  File "C:\Users\username\project_path\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 35, in __init__
    def __init__(self, executable_path=DEFAULT_EXECUTABLE_PATH, port=DEFAULT_PORT,
  File "C:\Users\username\project_path\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 37, in __init__
    def __init__(self, browser_name, vendor_prefix,
  File "C:\Users\username\project_path\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 195, in __init__
    def __init__(self, command_executor='http://127.0.0.1:4444',
  File "C:\Users\username\project_path\lib\site-packages\undetected_chromedriver\__init__.py", line 599, in start_session
    def start_session(self, capabilities=None, browser_profile=None):
  File "C:\Users\username\project_path\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 346, in start_session
    def start_session(self, capabilities: dict, browser_profile=None) -> None:
  File "C:\Users\username\project_path\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 408, in execute
    def execute(self, driver_command: str, params: dict = None) -> dict:
  File "C:\Users\username\project_path\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 102, in check_response
    def check_response(self, response: Dict[str, Any]) -> None:

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:...
from session not created: This version of ChromeDriver only supports Chrome version 107
Current browser version is 106.0.5249.119

Stacktrace:

Backtrace:
    Ordinal0 [0x00FEACD3+2075859]
    Ordinal0 [0x00F7EE61+1633889]
    Ordinal0 [0x00E7B7BD+571325]
    Ordinal0 [0x00E9DFCD+712653]
    Ordinal0 [0x00E96D24+683300]
    Ordinal0 [0x00E96B01+682753]
    Ordinal0 [0x00ECDBD3+908243]
    Ordinal0 [0x00ECD6AA+906922]
    Ordinal0 [0x00EC7136+880950]
    Ordinal0 [0x00E9FEFD+720637]
    Ordinal0 [0x00EA0F3F+724799]
    GetHandleVerifier [0x0129EED2+2769538]
    GetHandleVerifier [0x01290D95+2711877]
    GetHandleVerifier [0x0107A03A+521194]
    GetHandleVerifier [0x01078DA0+516432]
    Ordinal0 [0x00F8682C+1665068]
    Ordinal0 [0x00F8B128+1683752]
    Ordinal0 [0x00F8B215+1683989]
    Ordinal0 [0x00F96484+1729668]
    BaseThreadInitThunk [0x774CFA29+25]
    RtlGetAppContainerNamedObjectPath [0x779E7BBE+286]
    RtlGetAppContainerNamedObjectPath [0x779E7B8E+238]

编辑(更多关于Chrome版本的信息):

代码语言:javascript
运行
复制
C:\Users\username>REG QUERY HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon /v Version

HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon
    Version    REG_SZ    106.0.5249.119
EN

回答 1

Stack Overflow用户

发布于 2022-11-13 23:50:04

就在昨天,我遇到了同样的问题!

在花了一些时间寻找解决方案之后,我发现这条线从2016年开始就建议谷歌铬在自动更新时不会改变注册表中的版本。它可以解释为什么KEY_CURRENT_USER\Software\Google\Chrome\BLBeacon的版本比当前的浏览器版本要早。

这显然很烦人,因为chromedriver_autoinstaller使用这个确切的值来确定当前的浏览器版本,从而产生了这个错误。

为了解决这个确切的问题,我还没有找到任何解决方案,但是我设法找到了另一种方法来使用webdriver_manager库自动下载最新的正确的铬驱动程序(这基本上和chromedriver_autoinstaller一样,但是有一些额外的特性,比如提供精确的铬驱动程序版本的可能性)!它使用这条线,通过命令提示符设法获得正确的当前浏览器版本。它的缺点是,它需要对浏览器可执行文件进行硬编码的路径:

代码语言:javascript
运行
复制
import re
import subprocess

chrome_version = subprocess.check_output(
    r'wmic datafile where name="C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" get Version /value',
    shell=True
    )
    
# Retrieve the current browser major version
chrome_version = re.sub('Version=', '', chrome_version.decode('utf-8').strip()).split('.')[0]

一旦检索到该版本,我们就可以通过Google手动查找其相关的铬驱动程序版本,然后使用它实例化ChromeDriverManager (受webdriver_manager内部工作方式的启发):

代码语言:javascript
运行
复制
import urllib
from webdriver_manager.chrome import ChromeDriverManager

latest_release_url = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"

latest_release_url_version = f"{latest_release_url}_{chrome_version}"

with urllib.request.urlopen(latest_release_url_version) as response:
    chrome_driver_version = response.read().decode("utf-8")

chromedriver_filepath = ChromeDriverManager(version=chrome_driver_version).install()

我希望有一天这个错误会被修复,因为这个解决方案看起来不太可靠,但是它似乎在做这个工作。此外,我已经在webdriver_manager的GitHub存储库上使用了GitHub,并且可能对chromedriver_autoinstaller也做同样的操作。

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74279326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档