webentwicklung-frage-antwort-db.com.de

Wie konfiguriere ich ChromeDriver, um Chrome im Headless-Modus über Selenium zu starten?

Ich arbeite an einem python Skript, um Web-Scrape auszuführen, und bin den Weg gegangen, Chromedriver als eines der Pakete zu verwenden. Ich möchte, dass dieses Skript im Hintergrund ohne Pop-up ausgeführt wird Ich benutze die Option 'headless' auf dem Chromedriver und es scheint, als würde das Browserfenster nicht angezeigt, aber ich sehe immer noch die .exe-Datei. Siehe den Screenshot von dem, wovon ich spreche Screenshot

Dies ist der Code, mit dem ich ChromeDriver initiiere:

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('headless')
options.add_argument('window-size=0x0')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

Ich habe versucht, die Fenstergröße in den Optionen auf 0x0 zu ändern, bin mir jedoch nicht sicher, ob dies der Fall ist, da die EXE-Datei immer noch angezeigt wird.

Irgendwelche Ideen, wie ich das machen kann?

Ich benutze Python 2.7 FYI

33
Maz

Also nach der Korrektur meines Codes an:

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('--disable-gpu')
options.add_argument('--headless')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

Die EXE-Datei wurde beim Ausführen des Skripts immer noch angezeigt. Obwohl dies einige zusätzliche Ausgaben beseitigt hat, die mir sagten "GPU-Prozess konnte nicht gestartet werden".

Am Ende funktionierte mein Python Skript mit einer .bat Datei

Also im Grunde genommen,

  1. Speichere python script wenn ein Ordner
  2. Öffnen Sie den Texteditor und geben Sie den folgenden Code ein (bearbeiten Sie das Skript natürlich)

    c:\python27\python.exe c:\SampleFolder\ThisIsMyScript.py% *

  3. Speichern Sie die TXT-Datei, und ändern Sie die Erweiterung in .bat

  4. Doppelklicken Sie darauf, um die Datei auszuführen

Dadurch wurde das Skript in der Eingabeaufforderung gerade geöffnet, und ChromeDriver scheint in diesem Fenster zu funktionieren, ohne auf dem Bildschirm nach vorne zu springen und so das Problem zu lösen.

3
Maz

Es sollte so aussehen:

from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')  # Last I checked this was necessary.
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)

Dies funktioniert für mich mit Python 3.6, ich bin sicher, es wird auch für 2.7 funktionieren.

pdate 2018-10-26: In diesen Tagen können Sie dies einfach tun:

from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)
63
Daniel Porteous

Während der Arbeit mit Selenium Client 3.11.x, ChromeDriver v2.38 und Google Chrome v65.0.3325.181 in Headless Modus müssen Sie folgende Punkte beachten:

  • Sie müssen das Argument --headless hinzufügen, um Chrome im kopflosen Modus aufzurufen.
  • Für Windows-Betriebssysteme müssen Sie das Argument --disable-gpu hinzufügen.
  • Gemäß Headless: --disable-gpu-Flag überflüssig machen--disable-gpu Flag ist auf Linux-Systemen und MacOS nicht erforderlich.
  • Gemäß SwiftShader schlägt unter Windows im Headless-Modus fehl--disable-gpu - Flag wird auch unter Windows-Systemen unnötig.
  • Argument start-maximized wird für ein maximiertes Ansichtsfenster benötigt.
  • Möglicherweise müssen Sie das Argument --no-sandbox hinzufügen, um das Sicherheitsmodell des Betriebssystems zu umgehen.

  • Beispiel eines Windows-Codeblocks:

    from Selenium import webdriver
    from Selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("--headless") # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox') # Bypass OS security model
    options.add_argument('--disable-gpu')  # applicable to windows os only
    options.add_argument('start-maximized') # 
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized on Windows OS")
    
  • Beispiel für einen Linux-Codeblock:

    from Selenium import webdriver
    from Selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("--headless") # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox') # # Bypass OS security model
    options.add_argument('start-maximized')
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path='/path/to/chromedriver')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized on Linux OS")
    

Aktualisierung (23. April 2018)

Das programmatische Aufrufen von Google Chrome Browser in Headless Mode ist viel einfacher geworden die Verfügbarkeit der Methode set_headless(headless=True) wie folgt:

  • Dokumentation:

    set_headless(headless=True)
        Sets the headless argument
    
        Args:
            headless: boolean value indicating to set the headless option
    
  • Beispielcode :

    from Selenium import webdriver
    from Selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.set_headless(headless=True)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()
    

Hinweis : Das Argument --disable-gpu Wird intern implementiert.


Aktualisierung (13. Oktober 2018)

Um den Browser Chrome im Headless-Modus aufzurufen, können Sie die Eigenschaft --headless Wie folgt über die Klasse Options() festlegen:

  • Beispielcode :

    from Selenium import webdriver
    from Selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.headless = True
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()
    

Outro

Wie macht man Firefox in Selen mit Python kopflos?


tl; DR

Hier ist der Link zur Sandbox Geschichte.

40
DebanjanB
  1. Die .exe würde trotzdem laufen. Laut Google - "Im Headless-Modus ausführen, d. H. Ohne Benutzeroberfläche oder Abhängigkeit von Anzeigeservern."

  2. Stellen Sie Kommandozeilenargumenten besser 2 Bindestriche voran, d. H. options.add_argument('--headless')

  3. Im Headless-Modus wird auch empfohlen, die GPU zu deaktivieren, d. H. options.add_argument('--disable-gpu')

4
Aurel Branzeanu