python - 无法解析功能 : goog:chromeOptions from invalid argument: unrecognized chrome option: prefs

标签 python python-3.x selenium-webdriver webdriver selenium-chromedriver

我正在尝试使用 Selenium WebDriver 和 ChromeDriver 连接到现有 session 设置下载文件夹。由于某种原因,它总是失败并抛出以下错误:

>>> from selenium import webdriver
>>>
>>> chromeOptions = webdriver.ChromeOptions()
>>>
>>> download_folder = "D:\\Test"
>>> preferences = {
... "download.default_directory" : download_folder
... }
>>> chromeOptions.add_experimental_option("prefs", preferences)
>>> chromeOptions.add_experimental_option("debuggerAddress", "127.0.0.1:1111")
>>>
>>> chromeOptions.to_capabilities()
{'browserName': 'chrome', 'version': '', 'platform': 'ANY', 'goog:chromeOptions': {'prefs': {'download.default_directory': 'D:\\Test'}, 'debuggerAddress': '127.0.0.1:1111', 'extensions': [], 'args': []}}
>>>
>>> driver_Chrome = "D:\\chromedriver.exe"
>>> driver_Web = webdriver.Chrome(executable_path=driver_Chrome, chrome_options=chromeOptions)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 76, in __init__
    RemoteWebDriver.__init__(
  File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: cannot parse capability: goog:chromeOptions
from invalid argument: unrecognized chrome option: prefs

但是,如果我删除 chromeOptions.add_experimental_option 中的任何一个线然后它工作正常,这对我来说没有意义:
>>> from selenium import webdriver
>>>
>>> chromeOptions = webdriver.ChromeOptions()
>>>
>>> download_folder = "D:\\Test"
>>> preferences = {
... "download.default_directory" : download_folder
... }
>>> chromeOptions.add_experimental_option("prefs", preferences)
>>> # chromeOptions.add_experimental_option("debuggerAddress", "127.0.0.1:1111")
>>>
>>> chromeOptions.to_capabilities()
{'browserName': 'chrome', 'version': '', 'platform': 'ANY', 'goog:chromeOptions': {'prefs': {'download.default_directory': 'D:\\Test'}, 'extensions': [], 'args': []}}
>>>
>>> driver_Chrome = "D:\\chromedriver.exe"
>>> driver_Web = webdriver.Chrome(executable_path=driver_Chrome, chrome_options=chromeOptions)
<stdin>:1: DeprecationWarning: use options instead of chrome_options

DevTools listening on ws://127.0.0.1:4523/devtools/browser/e34332d4-50f0-4419-b9fb-37ede5f5602e
>>>
>>> from selenium import webdriver
>>>
>>> chromeOptions = webdriver.ChromeOptions()
>>>
>>> download_folder = "D:\\Test"
>>> preferences = {
... "download.default_directory" : download_folder
... }
>>> # chromeOptions.add_experimental_option("prefs", preferences)
>>> chromeOptions.add_experimental_option("debuggerAddress", "127.0.0.1:1111")
>>>
>>> chromeOptions.to_capabilities()
{'browserName': 'chrome', 'version': '', 'platform': 'ANY', 'goog:chromeOptions': {'debuggerAddress': '127.0.0.1:1111', 'extensions': [], 'args': []}}
>>>
>>> driver_Chrome = "D:\\chromedriver.exe"
>>> driver_Web = webdriver.Chrome(executable_path=driver_Chrome, options=chromeOptions)
>>>

我已经扩展了每个输出的“功能”,它们对我来说似乎很好:
{
    'browserName': 'chrome',
    'version': '',
    'platform': 'ANY',
    'goog:chromeOptions': {
        'prefs': {
            'download.default_directory': 'D:\\Test'
        },
        'debuggerAddress': '127.0.0.1:1111',
        'extensions': [],
        'args': []
    }
}
{
    'browserName': 'chrome',
    'version': '',
    'platform': 'ANY',
    'goog:chromeOptions': {
        'prefs': {
            'download.default_directory': 'D:\\Test'
        },
        'extensions': [],
        'args': []
    }
}

我的环境如下:
  • Windows 10 版本 2004
  • Python 64 位版本 3.8.4(最新)
  • Selenium 版本 3.141.0(最新)
  • Google Chrome 64 位版本 84.0.4147.89(最新),打开参数 --remote-debugging-port=1111
  • ChromeDriver 版本 84.0.4147.30

  • 我在网上找到的任何内容都没有帮助或关注这个特定场景。

    2020/09/07 23:26 更新:版本 85.0.4183.* 也有同样的问题。

    最佳答案

    免责声明:这是一种适合我需求的解决方法。这可能对每个人都没有帮助。
    我想将来自受 SSO 保护的网站的数据捕获为 pdf,事实证明,弄清楚如何进行身份验证以查看所需页面既麻烦又耗时。
    所以使用 debuggerAddress 登录到我已经登录到 SSO 的正在运行的 chrome 实例。
    但是在尝试调用 add_experimental_option 时面临与 OP 相同的问题两次,一次用于设置 debuggerAddress,另一次用于在 'prefs' 中设置打印首选项。
    解决方案

  • 只调用 add_experimental_option一次设置首选项并删除设置调用 debuggerAddress .
  • 添加 sleep time.sleep(60)至少一分钟
  • 这时候在脚本启动的chrome实例中登录SSO。
  • 一旦 sleep 完成,您的 selenium 脚本就可以使用 driver.get(url) 导航到所需的安全网站。
  • 关于python - 无法解析功能 : goog:chromeOptions from invalid argument: unrecognized chrome option: prefs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63091842/

    相关文章:

    python - 在 Python 中通过 Scipy 创建带通滤波器?

    python - 具有自动完成功能的免费 Python 编程环境

    python - 通过 Python 中的索引列表访问 Matrix 的元素,以在没有 for 循环的情况下将 max(val, 0.5) 应用于每个值

    python - 为什么QWidget在继承时表现不同

    python - 为什么 Selenium python 包中缺少 expected_conditions all_of、none_of 和 any_of?

    python - 集合运算的奇怪表现

    python - 使用推导式创建 Python 字典

    java - 消除网页上的重复链接并避免链接过时错误

    python-3.x - 传递变量 python 3 和 html

    javascript - 未捕获错误 : process. 不支持绑定(bind)(browserify+selenium-webdriver)