![](/img/trans.png)
[英]selenium.common.exceptions.WebDriverException: Message: invalid argument: unrecognized capability: chromeOptions with Selenium and ChromeDriver 77.0
[英]cannot parse capability: goog:chromeOptions from invalid argument: unrecognized chrome option: prefs
我正在嘗試使用 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)
>>>
我已經擴展了每個 output 的“功能”,它們對我來說似乎很好:
{
'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': []
}
}
我的環境如下:
--remote-debugging-port=1111
打開我在網上找到的任何內容都對這種特定情況沒有幫助或沒有幫助。
2020/09/07 23:26 更新:版本 85.0.4183.* 存在同樣的問題。
免責聲明:這是一種適合我需要的解決方法。 這可能對每個人都沒有幫助。
我想將來自受 SSO 保護的網站的數據捕獲為 pdf,事實證明,弄清楚如何進行身份驗證以查看所需頁面非常麻煩且耗時。
所以使用 debuggerAddress 登錄到我已經登錄到 SSO 的正在運行的 chrome 實例。
但是面臨與 OP 相同的問題,當嘗試調用add_experimental_option
兩次時,一次用於設置 debuggerAddress,另一次用於在“prefs”中設置打印首選項。
解決方案
add_experimental_option
來設置首選項並刪除設置debuggerAddress
的調用。time.sleep(60)
至少一分鍾driver.get(url)
導航到所需的安全網站也許您不能同時設置 debbugerAddress 和 download.default_directory,因為不允許您在正在運行的 chrome 實例上的下載目錄中進行更改。
# 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()
有點晚了,但這可能對其他人有用。 實際上你可以同時設置調試器地址和下載目錄,但不能在同一個選項中。 您可以使用兩種類型的選項來啟動驅動程序。
我安裝了 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.