首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法解析功能:goog:来自无效参数的chromeOptions:不可识别的chrome选项: prefs

无法解析功能:goog:来自无效参数的chromeOptions:不可识别的chrome选项: prefs
EN

Stack Overflow用户
提问于 2020-07-25 18:09:46
回答 3查看 11.6K关注 0票数 6

我试图使用Selenium WebDriver和ChromeDriver连接到现有的会话,设置下载文件夹。由于某些原因,它总是失败并引发以下错误:

代码语言:javascript
运行
复制
>>> 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行,那么它就能正常工作,这对我来说没有任何意义:

代码语言:javascript
运行
复制
>>> 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
>>>

代码语言:javascript
运行
复制
>>> 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)
>>>

我已经从每个输出中扩展了“功能”,在我看来,它们似乎很好:

代码语言:javascript
运行
复制
{
    'browserName': 'chrome',
    'version': '',
    'platform': 'ANY',
    'goog:chromeOptions': {
        'prefs': {
            'download.default_directory': 'D:\\Test'
        },
        'debuggerAddress': '127.0.0.1:1111',
        'extensions': [],
        'args': []
    }
}

代码语言:javascript
运行
复制
{
    'browserName': 'chrome',
    'version': '',
    'platform': 'ANY',
    'goog:chromeOptions': {
        'prefs': {
            'download.default_directory': 'D:\\Test'
        },
        'extensions': [],
        'args': []
    }
}

我的环境如下:

(latest)

  • Selenium

  • 10版本2004

  • Python 64位版本3.8.4 --remote-debugging-port=1111

  • ChromeDriver版本3.141.0 (latest)

  • Google Chrome 64位版本84.0.4147.89 (最新版本),与参数--remote-debugging-port=1111

  • ChromeDriver版本84.0.4147.30

一起打开

我在网上发现的任何东西都没有对这个特定的场景有所帮助。

更新2020/09/07 23:26:与85.0.4183版本相同的问题。

EN

回答 3

Stack Overflow用户

发布于 2020-12-24 09:47:48

免责声明:这是一个适合我需要的解决办法。这可能对每个人都有帮助。

我想从一个由SSO保护的网站中获取pdf数据,这证明了如何通过身份验证来查看所需的页面既麻烦又费时。

因此,使用debuggerAddress登录到运行我已经登录到SSO的chrome实例。

但是,当尝试调用add_experimental_option两次时,一次用于设置debuggerAddress,另一次用于在“prefs”中设置打印首选项,则面临与OP相同的问题。

溶液

debuggerAddress.

  • Add

  • 只调用add_experimental_option一次以设置prefs,并删除用于设置至少一分钟的

  • 的调用,在由脚本启动的chrome实例中登录到SSO。

  • 一旦睡眠完成,可以使用driver.get(url)

导航到所需的安全站点。

票数 4
EN

Stack Overflow用户

发布于 2020-09-29 03:54:16

也许您不能同时设置debuggerAddress和download.default_directory,因为您不允许在运行中的chrome实例上对下载目录进行更改。

票数 1
EN

Stack Overflow用户

发布于 2021-02-17 17:16:40

代码语言:javascript
运行
复制
# Make Sure you have folder in C drive with name download_file
# Please do make the changes according to your need, Thanks

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import time

# If you want to change the default download location to somewhere else
chromeOptions = Options()
chromeOptions.add_experimental_option("prefs", {"download.default_directory": "C:\\download_file"})

# Google Chrome
driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=chromeOptions)

# If you want to download the file in default location
# driver = webdriver.Chrome(ChromeDriverManager().install())

driver.get("http://demo.automationtesting.in/FileDownload.html")

driver.maximize_window()

# Download text file
driver.find_element_by_id("textbox").send_keys("testing download text file")
driver.find_element_by_id("createTxt").click() # Generate file Button
driver.find_element_by_id("link-to-download").click() # Download file

# Download pdf file
driver.find_element_by_id("pdfbox").send_keys("testing download pdf file")
driver.find_element_by_id("createPdf").click() # Generate file Button 
driver.find_element_by_id("pdf-link-to-download").click() # Download file

time.sleep(5)

# Close the Browser
driver.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63091842

复制
相关文章

相似问题

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