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
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,
Ö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% *
Speichern Sie die TXT-Datei, und ändern Sie die Erweiterung in .bat
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.
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)
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:
--headless
hinzufügen, um Chrome im kopflosen Modus aufzurufen.--disable-gpu
hinzufügen.--disable-gpu
Flag ist auf Linux-Systemen und MacOS nicht erforderlich.--disable-gpu
- Flag wird auch unter Windows-Systemen unnötig.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")
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.
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()
Wie macht man Firefox in Selen mit Python kopflos?
Hier ist der Link zur Sandbox Geschichte.
Die .exe würde trotzdem laufen. Laut Google - "Im Headless-Modus ausführen, d. H. Ohne Benutzeroberfläche oder Abhängigkeit von Anzeigeservern."
Stellen Sie Kommandozeilenargumenten besser 2 Bindestriche voran, d. H. options.add_argument('--headless')
Im Headless-Modus wird auch empfohlen, die GPU zu deaktivieren, d. H. options.add_argument('--disable-gpu')