I have been following tutorials, and I came up on Firefox, and using Options(), I could set headless mode while defining browser (browser = Firefox(options=opts)), but for Firefox only. I downloaded the driver for the new chromium Edge, but I cannot seem to set the options= keyword in Edge(). Can anyone tell me how do I set the options while defining the browser?
from selenium.webdriver import Edge
from selenium.webdriver.edge.options import Options
opts = Options()
opts.headless = True
browser = Edge(options=opts)
# ^^^^^
It seems there is no options keyword, and I get an error:
Traceback (most recent call last):
File ".\tutorial.py", line 6, in <module>
browser = Edge(options=opts)
TypeError: __init__() got an unexpected keyword argument 'options'
Any help will be appreciated.
Thanks in advance!
For Edge Chromium you need to install msedge-selenium-tools package for python and then you can initialize the driver
from msedge.selenium_tools import EdgeOptions
options = EdgeOptions()
options.use_chromium = True
driver = Edge(options)
I know there are already a couple threads about this, but I've went over them all, and this is my 3rd day trying to break through and haven't made any improvements. Here is the situation:
I'm trying to use this https://github.com/tejavoo/GooglePlayReviewScraper/blob/master/scraper.py to create a google play review scraper for my research, but continue recieving the following error:
Conda3/Python38/Windows10/Spyder 4.0.1
I've made sure that the chromedriver is in the PATH, and I've made sure it as all permissions, along with spyder and python. I also made sure it was the correct version that matches my google chrome.
I've downloaded the chromedriver, unzipped it into the folder I'm working in.
I also didn't have the Permission error (Winerror 5) Until I recently updated to spyder 4.
Please, what am I missing?
chromedriver = "C:\\Users\\james\\Downloads\\ML\\New folder\\chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600') # optional
driver = webdriver.Chrome(executable_path = chromedriver, chrome_options = options)
The Error
Traceback (most recent call last):
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\site-packages\selenium\webdriver\common\service.py", line 76, in start
stdin=PIPE)
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 104, in __init__
super(SubprocessPopen, self).__init__(*args, **kwargs)
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\subprocess.py", line 1207, in _execute_child
startupinfo)
*PermissionError: [WinError 5] Access is denied*
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\james\Downloads\ML\New folder\PlayReviews.py", line 37, in <module>
driver = webdriver.Chrome(executable_path = chromedriver, chrome_options = options)
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__
self.service.start()
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\site-packages\selenium\webdriver\common\service.py", line 88, in start
os.path.basename(self.path), self.start_error_message)
WebDriverException: 'chromedriver.exe' executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home
And if I change the code and place '' around chromedriver like this
chromedriver = ("C:\\Users\\james\\Downloads\\ML\\New folder\\chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600') # optional
driver = webdriver.Chrome(executable_path= 'chromedriver', chrome_options = 'options')
I get this
runcell(0, 'C:/Users/james/Downloads/ML/New folder/PlayReviews.py')
C:\Users\james\Downloads\ML\New folder\PlayReviews.py:37: DeprecationWarning: use options instead of chrome_options
driver = webdriver.Chrome(executable_path= 'chromedriver', chrome_options = 'options')
Traceback (most recent call last):
File "C:\Users\james\Downloads\ML\New folder\PlayReviews.py", line 37, in <module>
driver = webdriver.Chrome(executable_path= 'chromedriver', chrome_options = 'options')
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 64, in __init__
desired_capabilities = options.to_capabilities()
AttributeError: 'str' object has no attribute 'to_capabilities'
And a webdriver.py page opens
Any help is much appreciated!
Cheers :)
Update
I tried the raw string idea as mentioned
chromedriver = "C:/Users/james/Downloads/ML/New folder/PlayReviews.py"
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('window-size=1200x600') # optional
driver = webdriver.Chrome(executable_path = r'C:\\Users\\james\\Downloads\\ML\\New folder\\chromedriver.exe', chrome_options='options')
And it seems to maybe pass it? As now I am on to this error :
runcell(0, 'C:/Users/james/Downloads/ML/New folder/PlayReviews.py')
C:\Users\james\Downloads\ML\New folder\PlayReviews.py:39: DeprecationWarning: use options instead of chrome_options
driver = webdriver.Chrome(executable_path = r'C:\\Users\\james\\Downloads\\ML\\New folder\\chromedriver.exe', chrome_options='options')
Traceback (most recent call last):
File "C:\Users\james\Downloads\ML\New folder\PlayReviews.py", line 39, in <module>
driver = webdriver.Chrome(executable_path = r'C:\\Users\\james\\Downloads\\ML\\New folder\\chromedriver.exe', chrome_options='options')
File "C:\Users\james\.conda\envs\spyder-4.0.0_1\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 64, in __init__
desired_capabilities = options.to_capabilities()
AttributeError: 'str' object has no attribute 'to_capabilities'
However, this error, actually comes from line 64 of the webdriver.py which opens as a result of running the former
if chrome_options:
warnings.warn('use options instead of chrome_options',
DeprecationWarning, stacklevel=2)
options = chrome_options
if options is None:
# desired_capabilities stays as passed in
if desired_capabilities is None:
desired_capabilities = self.create_options().to_capabilities()
else:
if desired_capabilities is None:
desired_capabilities = options.to_capabilities()
else:
desired_capabilities.update(options.to_capabilities())
I have seen similar permission errors when the executable path was not a raw string. Have you tried formatting it like this?
driver = webdriver.Chrome(executable_path = r'C:\\Users\\james\\Downloads\\ML\\New folder\\chromedriver.exe', chrome_options = options)
I've finally managed to figure out where I went wrong.
While I had the PATH and all correct - the Chromdriver.exe file was not in my Python/scripts folder.
After setting it there, re-placing the PATH, all works well!! :)
Here is part of a little script I made to login and check for new questions on here. It is in a different library in C# but maybe it is still relevant and will help you discover the issue. Anyways the code is below hope it helps.
The only thing you aren't doing that I am is setting the BinaryLocation on the ChromeOptions and I am discovering the driver directory at run-time.
Also, sometimes the error messages like those are caused by exactly what they say is wrong. Maybe in order to run the selenium driver it may require more elevated windows permissions like when you right click and say run as administrator on programs sometimes. Have you tried running the terminal/command line that you are trying to run the python script on as an admin?
ChromeOptions options = new ChromeOptions();
options.BinaryLocation = #"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
using (IWebDriver driver = new ChromeDriver(GetChromeDriverDirectory(), options))
{
driver.NavigateToUrl("https://stackoverflow.com/questions/tagged?sort=Newest&filters=NoAnswers&tagMode=Watched");
}
// Here is the method I use to get the Chrome driver directory.
private static string GetChromeDriverDirectory() => Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
You need to take care of a few things:
While using Selenium's python client, to pass the absolute path of the ChromeDriver you need to use the single forward slash along with the raw i.e. r switch.
The argument chrome_options is now deprecated, instead you need to use options.
Your effective code block will be:
options = webdriver.ChromeOptions()
options.headless = True
# previously: options.set_headless(headless=True)
# long ago: options.add_argument('--headless')
options.add_argument('--window-size=1200x600')
driver = webdriver.Chrome(executable_path = r'C:\Users\james\Downloads\ML\New folder\chromedriver.exe', options = options)
References
You can find a couple of relevant discussions in:
'Webdrivers' executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home
How to configure ChromeDriver to initiate Chrome browser in Headless mode through Selenium?
I am creating a google form spam bot so that I can get random submission for my homework assignement;however I hav the eror: TabError: inconsistent use of tabs and spaces in indentation
note I am on Pycharm
and I am using the code in this link:(https://github.com/endeneer1/google-form-autofilling-spam-bot-using-Python-multiple-choice-questions/blob/master/google-form-spambot.py)`
I have looked on different threads but I can't find the answer.
import time
import random
from selenium import webdriver
chromedriver = r"C:\\Users\\LORD\\Desktop\\max spam shit\\chromedriver"
driver = webdriver.chrome(chromedriver)
link = 'https://docs.google.com/forms/d/1mUG-
vnGYMCyVP17chfx2bzszKkb4NHDLajrOMFbgi1I/viewform?
edit_requested=true&fbzx=1367418473376240610'
driver.get(link)
normally the bot opens a google page brings up the submission,fills it in then ,submits it rince and reapeat but It just comes with the error :C:\python\python.exe "C:/mblock python shit/gg.py"
Traceback (most recent call last):
File "C:/mblock python shit/gg.py", line 6, in
driver = webdriver.chrome(chromedriver)
TypeError: 'module' object is not callable
In the line driver = webdriver.chrome(chromedriver) chrome is a module. You should call webdriver.Chrome(chromedriver) where Chrome is a class.
This error message...
TypeError: 'module' object is not callable
...implies that the call to ChromeDriver to initiate/spawn a new WebBrowser i.e. Chrome Browser session was not valid.
Solution
You need to replace the lower-case c as in chrome with upper-case C i.e. replace:
driver = webdriver.chrome(chromedriver)
With:
driver = webdriver.Chrome(chromedriver)
I have written my first python script using selenium. I am using pycharm.
I got an error of chrome driver even I have downloaded chrome driver & set path in my script.
from selenium import webdriver
driver = webdriver.Chrome ("C:\chromedriver\chromedriver.exe")
driver.set_page_load_timeout(30)
driver.get("http://www.facebook.com")
driver.maximazie_window()
driver.implicitly_wait(20)
driver.get_screenshot_as_file("Facebook.png")
driver.quit()
I got an error like this
C:\Users\SapanaD\PycharmProjects\seleniumscripts\venv\Scripts\python.exe C:/Users/SapanaD/PycharmProjects/seleniumscripts/facebookpackage/Myfirstscript.py
Traceback (most recent call last):
File "C:/Users/SapanaD/PycharmProjects/seleniumscripts/facebookpackage/Myfirstscript.py",
line 4, in
driver = webdriver.Chrome ("C:\chromedriver\chromedriver.exe")
AttributeError: 'module' object has no attribute 'Chrome'
Process finished with exit code 1
I have tried double backslace"\" & install chrome driver also. I have research so many things but I cannot get proper solution.
Copy chromedriver.exe file in C:\Python27 location and after that try like as below and also if import statement is wrong then above exception will get
from selenium import webdriver
# create a new Firefox session
driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.maximize_window()
# Navigate to the application home page
driver.get("http://www.google.com")
# close the browser window
driver.quit() ```
I wrote this code which is in selenium webdriver in python.
I want to open link in chrome browser, the browser is getting started but can't fetch url.
def setUp(self):
self.browser = webdriver.Chrome("/usr/bin/google-chrome")
browser = self.browser
browser.implicitly_wait(5)
browser.get("http://www.google.com")
This gives this error:
ERROR: test_start (__main__.Saletest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "sale_test.py", line 16, in setUp
self.browser = webdriver.Chrome("/usr/bin/google-chrome")
File "/usr/local/lib/python2.7/dist- packages/selenium/webdriver/chrome/webdriver.py", line 60, in __init__
self.service.start()
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/chrome/service.py", line 88, in start
os.path.basename(self.path) + "'")
WebDriverException: Message: Can not connect to the 'google-chrome'
Basically Selenium find your binary, but can't connect to it.
Try this, this seems to correspond to your problem :)
WebDriverException: Message: 'Can not connect to the ChromeDriver'. Error in utils.is_connectable(self.port):
The first argument that webdriver.Chrome expects to be provided with is the executable_path - a path to the chromedriver, but you are passing a path to the Chrome itself.
The executable_path argument is optional. In case chromedriver is in PATH and selenium can automatically find it, you don't need to explicitly state where it is located.
If you want to provide a custom Chrome browser executable instead, define the Chrome binary location via ChromeOptions:
options = Options()
options.binary_location = "/path/to/google-chrome"
driver = webdriver.Chrome(chrome_options=options)
And, just for completeness, here is how would the setup look in case you have a custom chromedriver path and a custom Chrome browser binary path:
options = Options()
options.binary_location = "/path/to/google-chrome"
driver = webdriver.Chrome(executable_path="/path/to/chromedriver",
chrome_options=options)