16

Trying to run this code on my windows 10 machine 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()

I have all the correct programs installed:

  • running python 3.8
  • have chrome webdriver installed
  • running version 84 stable chrome web browser

When I run the program it opens chrome however I get a blank web page with nothing on there but some text which says "data:." that is all nothing else.

This is the error I get in 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.

Any help would be much appreciated, I am unsure why decouple is not working.

Mate Mrše
  • 7,997
  • 10
  • 40
  • 77
Ali
  • 161
  • 1
  • 1
  • 4

5 Answers5

18

This error message...

DeprecationWarning: use options instead of chrome_options

...implies that in your program you have used chrome_options to initiate a Selenium driven ChromeDriver initiated Browsing Context.

chrome_options is deprecated now and you have to use options instead as well as pass the absolute path of the ChromeDriver along with the extension.


Solution

As you are triggering your tests on a system, effectively you line of code will be:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(executable_path=r'C:\chromedriver_win32\chromedriver.exe', options=options)
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • this was the fix for the issue "driver = webdriver.Chrome('/chromedriver_win32/chromedriver.exe',options = options" however i still cannot get the program to show the website, any ideas?, i keep getting the error as stated in the first post about declaring something as env variable – Ali Aug 09 '20 at 09:00
  • @Ali Can you raise a new question for your new requirement please? – undetected Selenium Aug 09 '20 at 12:51
9

It's ok!

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)
叶玉国
  • 91
  • 1
  • 2
0

no, the error will remain if you cover it like this

browser = webdriver.Chrome(options=chrome_options)

it will be right

browser = webdriver.Chrome(options=options)
0

***Below code sample is from 2022 and uses 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)
Atul KS
  • 908
  • 11
  • 21
0

If you are now seeing WebDriver.__init__() got an unexpected keyword argument 'chrome_options', this is due to changes in selenium 4.10.0: https://github.com/SeleniumHQ/selenium/commit/9f5801c82fb3be3d5850707c46c3f8176e3ccd8e

Changes_in_selenium_4_10_0

chrome_options has been removed. Also, the driver manager is now built-in to selenium, so you no longer need to use the separate webdriver_manager. The Selenium Team talked about that here: https://www.linkedin.com/pulse/selenium-manager-best-tool-from-you-can-forget-david-burns/

Use the service and options args for passing in settings:

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

NOTE: Someone incorrectly closed WebDriver.__init__() got an unexpected keyword argument chrome_options as a duplicate and pointed to this page as having answers, but it's not the same question. This solution answers the question marked as a duplicate.

Michael Mintz
  • 9,007
  • 6
  • 31
  • 48