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)
Related
Hi I trying to run the below code for Edge Driver version Version 90.0.818.42 which is Chromium Based:
from selenium import webdriver
from msedge.selenium_tools import EdgeOptions
dirpath = os.getcwd()
edge_driver_path_used = dirpath + r'/features/resources/drivers/msedgedriver.exe'
my_edge_option = EdgeOptions()
my_edge_option.use_chromium = True
my_edge_option.binary_location = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
edge_driver = webdriver.Edge(options=my_edge_option)
edge_driver.get('My URL Here')
Upon running this code I am getting the below exception:
edge_driver = webdriver.Edge(options=my_edge_option)
TypeError: __init__() got an unexpected keyword argument 'options'
I don't seem to miss any import, then why am I getting this Exception? Kindly help me out
Seems like here's solution to your question:
How to run Microsoft Edge headless with Selenium Python?
options = EdgeOptions()
options.use_chromium = True
install the addition package like:
pip install msedge-selenium-tools
and initialize driver with:
from msedge.selenium_tools import EdgeOptions
from msedge.selenium_tools import Edge
# Edge in headless mode
edge_options = EdgeOptions()
edge_options.use_chromium = True
driver = Edge(executable_path='your_driver_path', options=edge_options)
Here's official docs:
https://learn.microsoft.com/en-us/microsoft-edge/webdriver-chromium/?tabs=python
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've installed selenium correctly as well as the chromium webdriver for selenium and I keep getting the following error
Traceback (most recent call last):
File "C:/Users/Turtle/PycharmProjects/SpotifyWebscraper/seleniumTest.py", line 3, in <module>
driver = webdriver.chrome()
TypeError: 'module' object is not callable
here is my code:
from selenium import webdriver
driver = webdriver.chrome()
driver.get("htts://www.google.com")
print(driver.title)
print(driver.current_url)
driver.quit
I've checked in the folders correctly and the files seem to be in the right positions:
C:\Users\Turtle\AppData\Local\Programs\Python\Python38\Lib\site-packages\selenium-4.0.0a3-py3.8.egg\selenium\webdriver\chromium
contains webdriver.py
If you look at the way Selenium imports the various flavours of webdriver to selenium.webdriver you can see that the import you want is Chrome
from .firefox.webdriver import WebDriver as Firefox # noqa
from .chrome.webdriver import WebDriver as Chrome # noqa
So you would do driver = webdriver.Chrome() or if you want Firefox, webdriver.Firefox()
By doing webdriver.chrome() you're importing & calling the actual chrome module
In terms of your new error, you need to download the chromedriver executable and make sure it's in a folder which is available to python (included in your PATH). You can download chromedriver here; https://sites.google.com/a/chromium.org/chromedriver/downloads
The error in your title is different than the one in your post.
TypeError: 'module' object is not callable
chrome should be capitalized in webdriver.chrome():
driver = webdriver.Chrome() # .Chrome(), not .chrome()
I have read the api doc on how to setup the the chrome webdriver but I am a little new to **kwargs and I have to pass the executable_path as a dictionary entry, can some one tell me what am I doing wrong in my code?
executable_path = {'executable_path':'/usr/bing/firefox-esr'}
browser = Browser('firefox', **executable_path)
this is the error im getting
Traceback (most recent call last):
File "logger.py", line 10, in <module>
browser = Browser('firefox', **executable_path)
File "/usr/local/lib/python2.7/dist-packages/splinter/browser.py", line 63, in Browser
return driver(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'executable_path'
and this is the code that is supplied by the splinter website as an example
executable_path = {'executable_path':'</path/to/chrome>'}
browser = Browser('chrome', **executable_path)
You specified 'firefox' instead of 'chrome', and Splinter's firefox driver does not have the executable_path argument.
See the source for Splinter 0.7.4: https://github.com/cobrateam/splinter/blob/e23df9c7e0ba9d1b495292cf8c23c0fe4192b26d/splinter/driver/webdriver/firefox.py#L20
Nvm guys, the problem was I didn't have a geckodriver in usr/local/bin folder and then you can set browser = Browser ('firefox')
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)