python-3.x 无法解析权能:无效参数的goog:chromeOptions:无法识别的chrome选项:首选项

wlzqhblo  于 2023-01-14  发布在  Python
关注(0)|答案(4)|浏览(774)

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

>>> 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,它就可以正常工作,但这对我来说没有意义:
x一个一个一个一个x一个一个二个x
我已经扩展了每个输出的"功能",它们看起来不错:
一个三个三个一个
我的环境如下:

  • Windows 10版本2004
  • Python 64位版本3.8.4(最新版本)
  • Selenium版本3.141.0(最新)
  • Google Chrome 64位版本84.0.4147.89(最新版本),使用参数--remote-debugging-port=1111打开
  • Chrome驱动程序版本84.0.4147.30

我在网上找到的任何东西都没有帮助,也没有关于这个特殊情况的。

    • 更新日期:2020年9月7日23:26:**版本85.0.4183. * 存在相同问题。
fdbelqdn

fdbelqdn1#

免责声明:这是一个适合我需要的变通方案。这可能不会对每个人都有帮助。
我想从一个受SSO保护的网站上捕获PDF格式的数据,但事实证明,要弄清楚如何进行身份验证才能查看所需的页面,既麻烦又耗时。
因此,使用debuggerAddress登录到运行chrome示例,我已经登录到SSO。
但遇到与OP相同的问题,尝试调用add_experimental_option两次,一次用于设置debuggerAddress,另一次用于设置"prefs"中的打印首选项。

    • 解决方案**

1.仅调用add_experimental_option一次以 * 设置首选项 * 和 * 删除调用 * 来设置debuggerAddress
1.添加睡眠time.sleep(60)至少一分钟
1.此时,通过脚本启动chrome示例中的SSO登录。
1.睡眠完成后,Selenium脚本可以使用driver.get(url)导航到所需的安全网站

nqwrtyyt

nqwrtyyt2#

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

siotufzp

siotufzp3#

# 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()
e1xvtsh3

e1xvtsh34#

有点晚了,但这可能对其他人有用。实际上,你可以设置调试器地址和下载目录,但不能在同一个选项中。你可以使用两种类型的选项来初始化驱动程序。
我已经安装了selenium 4.2.0,这对我来说在Windows上是有效的。

from selenium.webdriver import Chrome, ChromeOptions

chrome_driver_path = "Path to your chrome driver"
download_folder = "Download folder path"
preferences = {"download.default_directory" : download_folder}

options = ChromeOptions()
chrome_options = ChromeOptions()

options.add_experimental_option("prefs", preferences)
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = Chrome(chrome_driver_path, options=options, chrome_options=chrome_options)

相关问题