For Python, why does Selenium not read Geckodriver yet read Chromedriver? - python

So basically, I added geckodriver.exe to the environment variables Path on Windows 10, yet trying
from selenium import webdriver
driver=webdriver.Firefox()
still resulted in the error message that "Geckodriver" executables need to be installed on Path
Now, I installed Chrome and the chromedriver.exe file off the web and ran chromedriver on Selenium just fine
from selenium import webdriver
browser=webdriver.Chrome(r'c:\chromedriver\chromedriver.exe')
This works and Google Chrome is open, so now I try to add the path in Firefox and when the path suggestions are showing up, selenium doesn't even recognize the geckodriver.exe exists, and pathlib does recognize the Path('c:/geckodriver/geckodriver.exe').exists()==True.
browser=webdriver.Firefox(r'c:\geckodriver\geckodriver.exe')
NotADirectoryError
So selenium is saying that the .exe file that clearly exists does not exist. How do I solve this problem?

For FireFox webdriver you'll need to set the path like this:
browser=webdriver.Firefox(executable_path=r'c:\geckodriver\geckodriver.exe')

Related

How to solve Selenium WebDriver Error using Python?

I am learning Python to tried to do an extraction of data from another website. However, I wrote a simple code to try to open a Chrome browser window and display google on my web browser.
I have seen in other videos that it is only needed to write the following code to get this to work:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.google.com")
However, when I try to run it on my PyCharm, I got plenty of error lines. The same happen if I try to run it through my command prompt (both stating the same error - pictures below). I do not know what I am missing, but I should mention that I have downloaded the packages pip, selenium, selenium-chromedriver and I have also downloaded ChromeDriver separetely from the website https://chromedriver.chromium.org/
Could anyone please guide me through this issue? Thanks a lot everyone for your precious help and your time!
Kind regards,
Salvador
ChromeDriver_executable_location
Command_prompt
Python_codeError1
Python_codeError2
Packages_installed
Please post the errors so we can see what it is tell you is wrong.
I am also new to selenium and learning python.
First, make sure your Chromedriver is located in the same folder as your script.
Second, make sure your version of Chrome and Chromedriver are compatible.
Also, when the script is finish it will close the browser immediately.
I ran your posted code and it works for me. Did you have any errors when installing the packages?
I'm not sure why you get an error, but I know a workaround that might work for you.
Instead of using the webdriver file, you can use a service to install it for you, like this:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
You need to install the webdriver_manager library first using pip
Hope this helps
You could place the Chromedriver in system path and try to execute.
Go to Advanced System Settings.
Click on Environment variables.
Select Path variable and click on Edit.
Add the Chromedriver folder path.
Suppose the path for chromedriver.exe file is - C:/project/Chromedriver/chromedriver.exe, place C:/project/Chromedriver in the Path variable.
Restart the computer and then try to execute below lines:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.google.com")

PyInstaller .spec file not creating Chrome Webdriver binary as expected

I'm trying to create the Chrome webdriver binary for bundling into my executable but the .spec file isn't doing what I ask..
My project code has the following -
from selenium import webdriver
driver = webdriver.Chrome("/Users/me/.wdm/drivers/chromedriver/mac64/96.0.4664.45/chromedriver")
This is correct and all works well when I run in IDLE.
Here's the relevant section of the 'project.spec' file for PyInstaller -
a = Analysis(['project.py'],
pathex=['/Users/me/Desktop/project'],
binaries=[('/Users/me/.wdm/drivers/chromedriver/mac64/96.0.4664.45/chromedriver', './selenium/webdriver')],
datas=[],
The selenium and webdriver folders build correctly in dist -
/dist/project/selenium/webdriver
but in here I have two folders, neither of which contain the Chrome webdriver -
/firefox
/remote
Just a folder for Firefox (which I don't use and have never mentioned once in any of my code) with the FF webdriver and a .xpi file, and the 'remote' folder, which contains 'getAttribute.js' and 'isDisplayed.js'.
I've obviously tried running the executable and it's fine until the point the webdriver is required, at which point it throws -
AttributeError: module 'selenium.webdriver' has no attribute 'Chrome'
How can I get this working? I've seen several similar questions but none of them are helping me.
I'm new to PyInstaller and have never created a binary like this before. What am I missing?
Take a look at the docs, possibly instead of the absolute path of the ChromeDriver, the binaries parameter should take the absolute path of the Browser executable e.g. chrome, firefox etc.

python-selenium.common.exceptions.WebDriverException: Message: Unknown error

I'm up with python 3.8 and selenium but recently I downloaded the latest edge web driver zip file and runned the mswdedriver.exe from that and typed this code in my ide:
from selenium import webdriver
browser = webdriver.Edge('‪F:\za\python\Assistant\msedgedriver.exe')
browser.maximize_window()
browser.get(url='http://seleniumhq.org/')
but I see this error:
selenium.common.exceptions.WebDriverException: Message: 'MicrosoftEdgeDriver' executable needs to be
in PATH. Please download from http://go.microsoft.com/fwlink/?LinkId=619687
Can you help me friends?
Thanks in advance.
You need to give a path to the webdriver executable when you load a webdriver, or have it stored as an environment variable:
webdriver.Edge(executable_path="path/to/executable")
A web driver is essentially a special browser application, you must install that application before you can run anything with it.
Here's Edge's web driver download page. Or you can use the link from the error message http://go.microsoft.com/fwlink/?LinkId=619687
Here's a similar question Python Selenium Chrome Webdriver
The backslashes in the executable path need to be escaped, per Python syntax:
browser = webdriver.Edge('‪F:\\za\\python\\Assistant\\msedgedriver.exe')
This problem appears to me
you must put in "Bin Folder" the file "MicrosoftWebDriver.exe" as is , edit the previous name of edge webdriver to be "MicrosoftWebDriver.exe" and put it in the "Bin Folder"
You need to download the browser driver from here
After the download completes, extract the driver executable to your preferred location. Add the folder where the executable is located to your PATH environment variable.

Message: 'chromedriver.exe' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

Ok, so I decided to use selenium for some code, but it doesn't work. When I put the chromedriver in my path, manually, it still doesn't work. can anyone help. PS: I already pip installed selenium.
Also, I watch/read the other article on stack overflow about this problem, but it didn't help me.
If you put chromedriver in the home directory of the user running it, that should work. Would be helpful if you stated in your question what OS/version you are using.
This problem occurs when the .py file you are running cannot find chrome driver. the best thing you can do in this situation is that the chrome driver that you installed copy and paste it in same folder as your .py file and then keep your path blank. if you keep your path blank it basically means that the .py file will search the driver on in its folder so make sure you have chrome driver in the same folder ask .py file and then keep your web driver as:
driver = webdriver.Chrome()
Well add change the code to this
import os
path = os.path.join(os.path.dirname(os.path.realpath(__file__)) + r'\chromedriver')
driver = webdriver.Chrome(executable_path = path)
So what is does is it add the chrome webdriver from path to selenium webdriver. Make sure to add the chromedriver.exe file in the root of the folder.

why wont selenium module work properly for me

I installed the selenium module with pip installer. Then I tried to make the code to open firefox, then open a new tab to go to google.
Code:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.google.com")
The expected result should have opened firefox and then go to google.com.
But what actually happened was the program didn't produce any error, it just didn't open firefox, and the screen wasn't frozen either.
Download a matching version of Geckodriver and unpack the geckodriver.exe to the location where current user can execute programs from (normally it's any place inside your home folder)
Amend your code to include the location of the aforementioned geckodriver like:
driver = webdriver.Firefox(executable_path="/path/to/the/geckodriver/binary")
If this doesn't help - provide the path to the Firefox executable as well:
driver = webdriver.Firefox(executable_path="/path/to/the/geckodriver/binary", firefox_binary="/path/to/firefox/binary")
Instead of steps 2 and 3 you can add both firefox and geckodriver to your OS PATH
References:
Selenium with Python - Getting Started
Selenium With Python
Selenium using Python - Geckodriver executable needs to be in PATH

Categories