Selenium with Python using Geckodriver for Firefox in Kali Linux
Selenium seems to be great for browser automation and has support for multiple programming languages, including my favorite – Python. I decided to test it on Kali Linux and faced certain issues. So I resolved them one at a time and I am logging the procedure here.
First, we need to install the Selenium module in Python using
pip install. This is simply:
apt-get install python-pip pip install selenium
This should install the latest version of Selenium module. Test it by going to the Python command line and importing the module:
from selenium import webdriver
This works. What does not work is following test code:
browser = webdriver.Firefox() browser.get('https://lifeofpentester.blogspot.com/')
It fails saying: webdriverexception:
geckodriver executable needs to be in path.
To resolve this, we need to install
geckodriver from its Github here: https://github.com/mozilla/geckodriver/releases
I grabbed Linux64 bit version since I am running Kali Linux 64 bit. Unpack the archive and make the
geckodriver executable and copy it so that Python can find it:
root@amirootyet:~# chmod +x Downloads/geckodriver root@amirootyet:~# cp Downloads/geckodriver /usr/local/bin
Now we are faced with a new error:
selenium.common.exceptions.WebDriverException: Message: connection refused
The problem here is that the latest version of Selenium that we installed cannot interface with the older version of Firefox that comes bundled with Kali Linux. I do have the latest version of Firefox downloaded and unzipped.
Loading the correct Firefox version
So now we point Selenium to use this latest binary of Firefox instead:
from selenium.webdriver.firefox.firefox\_binary import FirefoxBinary binary = FirefoxBinary('/root/Downloads/firefox/firefox') driver = webdriver.Firefox(firefox\_binary=binary)
Of course, you need to ensure that paths are correct pertaining to your system and where you downloaded and unzipped Firefox. At this point, we can get this Python script to open a webpage for us:
from selenium import webdriver from selenium.webdriver.firefox.firefox\_binary import FirefoxBinary binary = FirefoxBinary('/root/Downloads/firefox/firefox') driver = webdriver.Firefox(firefox\_binary=binary) driver.get('https://www.lifeofpentester.blogspot.com') # insert time.sleep() here driver.close()
So now that we have some browser automation going, I will post more results and scripts such as logging into web forms using automated Selenium scripts when I find time. Let me know in comments if this solution worked for you.