Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firefox with Selenium (Headless)

How to use selenium with firefox to scrape websites?

Install Firefox, xvfb, selenium

echo "deb http://packages.linuxmint.com debian import" >> /etc/apt/sources.list && apt-get update
apt-get install firefox xvfb python-dev python-pip
pip install pyvirtualdisplay selenium

selenium_scrape.py

from pyvirtualdisplay import Display
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

display = Display(visible=0, size=(800, 600))
display.start()

def init_driver():
    driver = webdriver.Firefox()
    driver.wait = WebDriverWait(driver, 5)
    return driver

def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
    box = driver.wait.until(EC.presence_of_element_located(
        (By.NAME, "q")))
    button = driver.wait.until(EC.element_to_be_clickable(
        (By.NAME, "btnK")))
    box.send_keys(query)
button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")

if __name__ == "__main__":
    driver = init_driver()
    lookup(driver, "Selenium")
    time.sleep(5)
    driver.quit()

display.stop()

Error

  File "selenium_scrape.py", line 20
    box = driver.wait.until(EC.presence_of_element_located(
      ^
IndentationError: expected an indented block
like image 335
clarkk Avatar asked Feb 13 '16 16:02

clarkk


People also ask

How do I run Selenium in headless mode in Firefox?

Headless Execution Firefox Driver It is quite simple to run your tests in the headless mode. You need simply to add the "--headless" argument to the FirefoxOptions object.

Can Firefox run headless?

Firefox in headless mode, can be run once we configure the geckodriver path. We shall then use the FirefoxOptions class, and send the headless knowledge to the browser with setHeadless method and pass true as a parameter to it.

Can I use Selenium with Firefox?

Mozilla Firefox is one of the most widely used browsers in the world. It has enhanced features and is supported by a multitude of the latest testing tools and techniques. One such tool is Selenium.

How do I make Firefox headless in Selenium Python?

How to make Firefox headless programmatically in Selenium with Python? To make Firefox headless programmatically in Selenium with Python, we can set the headless property to True . to create an Options object. And we set the headless property of it to True .


1 Answers

The difference is that you cannot use a packaged Chrome browser; you need a special driver... chromedriver.

Get the current latest version here: Chromedriver

Now you have 2 options, either to move the downloaded chromedriver so it is always accessible (option 1), or to define in your script how to access it.

Option 1: move it into path

Then move it so it is accessible when you use webdriver.Chrome():

sudo mv /path/to/download/chromedriver /usr/bin

Also set it to be allowed to be executed:

chmod a+x /usr/binchromedriver

Option 2: do not move it into path

Or you can define a path

import os
chr = "/Users/you/Downloads/chromedriver"
os.environ["webdriver.chrome.driver"] = chr
driver = webdriver.Chrome(chromedriver)
like image 194
PascalVKooten Avatar answered Oct 01 '22 02:10

PascalVKooten