DeprecationWarning: 使用 options 替代 chrome_options 错误,使用 ChromeDriver 和 Chrome 通过 Selenium 在 Windows 10 系统上

17

我试图在我的Windows 10电脑上运行这段代码 https://github.com/KalleHallden/reddit_automations/blame/master/movie-tickets.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from decouple import config
import time

# the way to locate the button or thing you want on a website in chrome is
# by pressing cmd + shift + c and then you can use your mouse to find the 
# info on the element that you want and you can copy the full xpath.

options = webdriver.ChromeOptions()
# options.add_argument('--ignore-certificate-errors')
# options.add_argument('--incognito')
# options.add_argument('--headless')
driver = webdriver.Chrome("/Users/kalle/Downloads/chromedriver83", chrome_options=options)
driver.get(config('THEATRE_SITE'))
# for some odd reason you need to reload the site for it to load.
# possibly a bug of the theatre site
driver.get(config('THEATRE_SITE'))
time.sleep(3)
# select city
button = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div/div[1]/div/div[2]/ul/li[1]/label/input')
button.click()

# save city
button = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div/div[2]/span/button')
button.click()
time.sleep(2)

# proceed to tickets tab
button = driver.find_element_by_xpath('/html/body/div[1]/nav/div[2]/div[2]/div[1]/ul[1]/li[1]/a')
button.click()
time.sleep(2)

# select the movie you want (should be more specific than just selecting the first one but whateva)
button = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[2]/div/div/div/div[2]/div/div[2]/div[2]/div[2]/ul/li[1]/ul/li/div/div[1]/div/span[2]/a')
button.click()
time.sleep(1)

# select the time you want to go
button = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[1]/div/div/div/div[4]/section/div/div[2]/div[2]/ul/li/ul/li[1]/div/span/span[3]/span[2]/span')
button.click()
time.sleep(1)

# choose amount of people
button = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[2]/div/div/div/div/section/div/div[2]/div/button')
button.click()
time.sleep(2)

# choose seats
button = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[1]/div/div/div/div[2]/section/div[3]/div[2]/button')
button.click()
time.sleep(2)

# pay
button = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[1]/div/div/div/div[2]/section/div[4]/div/div[2]/button/span')
button.click()

我已经安装了所有正确的程序:

  • 正在运行 Python 3.8
  • 已安装 Chrome webdriver
  • 正在运行版本为 84 稳定版的 Chrome 浏览器

当我运行程序时,它会打开 Chrome 浏览器,但是我得到一个空白网页,除了一些文字显示为“data:.”,没有别的内容。

这是我在 VS code 中收到的错误信息:

:\Users\user>python c:/chromedriver_win32/movie-tickets1.py
c:/chromedriver_win32/movie-tickets1.py:15: DeprecationWarning: use options instead of chrome_options
  driver = webdriver.Chrome(executable_path=r'C:\chromedriver_win32\chromedriver.exe', chrome_options=options)

DevTools listening on ws://127.0.0.1:29442/devtools/browser/872d4312-b51d-4a38-bc1b-3b80495950
Traceback (most recent call last):
  File "c:/chromedriver_win32/movie-tickets1.py", line 17, in <module>
    driver.get(config("https://www.google.co.uk"))
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\decouple.py", line 199, in __call__
    return self.config(*args, **kwargs)
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\decouple.py", line 83, in __call__
    return self.get(*args, **kwargs)
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\decouple.py", line 68, in get
    raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
decouple.UndefinedValueError: https://www.google.co.uk not found. Declare it as envvar or define a default value.

非常感激任何帮助,我不确定为什么解耦未能正常工作。

5个回答

18

这个错误消息...

DeprecationWarning: use options instead of chrome_options

这意味着在您的程序中,您使用chrome_options来启动基于SeleniumChromeDriver 初始化的 Browsing Context

chrome_options现已被废弃,您必须改用options并传递ChromeDriver绝对路径以及扩展名。


解决方案

由于您正在触发在系统上的测试,因此您的代码行将如下所示:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(executable_path=r'C:\chromedriver_win32\chromedriver.exe', options=options)

这是解决问题的方法:“driver = webdriver.Chrome('/chromedriver_win32/chromedriver.exe',options = options",但我仍然无法让程序显示网站,有什么想法吗?我一直收到关于将某些内容声明为环境变量的第一篇帖子中提到的错误。 - Ali
@Ali,您能否提出一个新问题来满足您的新需求? - undetected Selenium

10

没问题!

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)

0

***以下代码示例取自2022年,使用Web Driver Manager(https://pypi.org/project/webdriver-manager/


#Imports for Web Driver, Service, Web Driver Manager

   from selenium import webdriver
   from selenium.webdriver.chrome.service import Service as ChromeService
   from webdriver_manager.chrome import ChromeDriverManager

#options reference to Chrome Options

   options = webdriver.ChromeOptions()
   options.add_argument("--start-maximized")

#Pass options to the WebDriver with ChromeDriverManager

     driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)

0
不,如果你这样覆盖它,错误仍然会存在。
browser = webdriver.Chrome(options=chrome_options)

它将是正确的

browser = webdriver.Chrome(options=options)

0
如果您现在看到的是WebDriver.__init__() got an unexpected keyword argument 'chrome_options',这是由于selenium 4.10.0中的更改所致: https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8e

Changes_in_selenium_4_10_0

chrome_options已被移除。此外,驱动程序管理器现在已内置到selenium中,因此您不再需要使用单独的webdriver_manager。Selenium团队在这里讨论了这个问题:https://www.linkedin.com/pulse/selenium-manager-best-tool-from-you-can-forget-david-burns/

使用serviceoptions参数来传递设置:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service()
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ...
driver.quit()

注意:有人错误地将WebDriver.__init__() got an unexpected keyword argument chrome_options关闭为重复,并指向此页面作为答案,但这不是同一个问题。这个解决方案回答了被标记为重复的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接