Selenium gebruiken met Headless Chrome Webdriver

Dus ik probeer wat dingen uit met selenium en ik wil echt dat het snel gaat.

Dus mijn gedachte is dat het draaien met headless chrome mijn script sneller zou maken.

Ten eerste is die aanname juist, of maakt het niet uit of ik mijn script uitvoer met een headless driver?

Hoe dan ook, ik wil het nog steeds aan het werk krijgen om headless te werken, maar op de een of andere manier kan ik het niet, ik heb verschillende dingen geprobeerd en de meesten suggereerden dat het zou werken zoals hier in de oktober-update is gezegd

ChromeDriver configureren om Chrome-browser starten in Headless-modus via Selenium?

Maar als ik dat probeer, krijg ik rare console-uitvoer en het lijkt nog steeds niet te werken.

Alle fooien worden op prijs gesteld.


Antwoord 1, autoriteit 100%

Om chrome-headless uit te voeren, voegt u gewoon --headlesstoe via chrome_options.add_argument, d.w.z.:

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
#chrome_options.add_argument("--disable-extensions")
#chrome_options.add_argument("--disable-gpu")
#chrome_options.add_argument("--no-sandbox") # linux only
chrome_options.add_argument("--headless")
# chrome_options.headless = True # also works
driver = webdriver.Chrome(options=chrome_options)
start_url = "https://duckgo.com"
driver.get(start_url)
print(driver.page_source.encode("utf-8"))
driver.quit()
# b'<!DOCTYPE html><html xmlns="http://www....

Dus mijn gedachte is dat het draaien met headless chrome mijn
sneller scripten.

Probeer chrome-opties zoals --disable-extensionsof --disable-gpute gebruiken en benchmark het, maar ik zou niet met veel verbetering rekenen.


Referenties: headless-chrome

Opmerking: Vanaf vandaag moet u bij het uitvoeren van chrome headless op Windows moetde  --disable-gpu vlag
Zie crbug.com/737678


Antwoord 2, autoriteit 9%

Installeer & voer Chrome in containers uit:

docker pull selenium/standalone-chrome
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome

Verbinden via webdriver.Remote:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.CHROME)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')

Antwoord 3, autoriteit 4%

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(executable_path="./chromedriver", options=chrome_options)
url = "https://stackoverflow.com/questions/53657215/running-selenium-with-headless-chrome-webdriver"
driver.get(url)
sleep(5)
h1 = driver.find_element_by_xpath("//h1[@itemprop='name']").text
print(h1)

Vervolgens voer ik het script uit op onze lokale computer

➜ python script.py
Running Selenium with Headless Chrome Webdriver

Het werkt en het is met headless Chrome.


Antwoord 4, autoriteit 4%

Als je een Linux-omgeving gebruikt, moet je misschien ook --no-sandboxtoevoegen en ook specifieke instellingen voor venstergrootte. De vlag --no-sandboxis niet nodig in Windows als u de gebruikerscontainer correct instelt.

Gebruik --disable-gpualleen op Windows. Andere platforms hebben het niet langer nodig. De vlag --disable-gpuis een tijdelijke oplossing voor een paar bugs.

//Headless chrome browser and configure
            WebDriverManager.chromedriver().setup();
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("--no-sandbox");
            chromeOptions.addArguments("--headless");
            chromeOptions.addArguments("disable-gpu");
//          chromeOptions.addArguments("window-size=1400,2100"); // Linux should be activate
            driver = new ChromeDriver(chromeOptions);

Antwoord 5

Todo (getest op headless server Debian Linux 9.4):

  1. Doe dit:

    # install chrome
    curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
    echo "deb [arch=amd64]  http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
    apt-get -y update
    apt-get -y install google-chrome-stable
    # install chrome driver
    wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip
    unzip chromedriver_linux64.zip
    mv chromedriver /usr/bin/chromedriver
    chown root:root /usr/bin/chromedriver
    chmod +x /usr/bin/chromedriver
    
  2. Selenium installeren:

    pip install selenium
    

    en voer deze Python-code uit:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    options = Options()
    options.add_argument("no-sandbox")
    options.add_argument("headless")
    options.add_argument("start-maximized")
    options.add_argument("window-size=1900,1080"); 
    driver = webdriver.Chrome(chrome_options=options, executable_path="/usr/bin/chromedriver")
    driver.get("https://www.example.com")
    html = driver.page_source
    print(html)
    

Antwoord 6

Zodra u selenium en webstuurprogramma hebt geïnstalleerd. Hieronder werkte voor mij met headless Chrome op linux-cluster:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--disable-extensions")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
options.add_experimental_option("prefs",{"download.default_directory":"/databricks/driver"})
driver = webdriver.Chrome(chrome_options=options)

Other episodes