[PYTHON] Ich habe versucht, Headless Chrome von Selenium zu verwenden

** 6. Mai 2018: Ich habe einen neuen Artikel geschrieben, der der aktuellen Situation entspricht, nachdem Headless Chrome stabil geworden ist. Siehe auch hier. ** **.

Neulich sprach Vitaly von PhantomJS über die Geschichte des Ruhestands als Betreuer. PhantomJS hat mir geholfen, einen kopflosen Browser auf einfache Weise zu verwenden. Ich möchte, dass Sie in Zukunft Headless Chrome verwenden, also habe ich es versucht.

Ich kann viele Beispiele finden, die Node.js verwenden, aber ich wollte Python aus verschiedenen Gründen verwenden, daher werde ich hier Headless Chrome über Selenium verwenden.

Was ist Headless Chrome?

Es ist ein Modus, der ohne Anzeige des Bildschirms funktioniert, der in Google Chrome 59 verfügbar sein wird. Nützlich für automatisierte Tests und Web Scraping.

Ab dem 28. April 2017 scheint es auf den Mac- und Linux-Versionen der Dev- oder Canary-Kanäle verfügbar zu sein. Ich habe es auf der Mac-Version des Kanarischen Kanals versucht. Ich habe es auch in der Windows-Version des Kanarischen Kanals versucht, aber der Bildschirm wurde angezeigt, auch wenn ich "--headless" angegeben habe. Ich denke, es wird bald verfügbar sein [^ 1].

[^ 1]: Referenz: https://bugs.chromium.org/p/chromium/issues/detail?id=712981

Derzeit ist die Verwendung über chrome-remote-interface von Node.js einfach, und es gibt viele Informationen. Sie sollten es daher von hier aus versuchen. Machen wir das.

Übrigens scheint es viele Beispiele für die Verwendung von Chrome auf einem virtuellen Display wie Xvfb zu geben. Wenn Sie googeln, überprüfen wir, welche Bedeutung es verwendet.

Verwenden Sie Headless Chrome von Selen

Headless bedeutet nicht viel anders als die Verwendung von normalem Chrome. Bedienen Sie Chrome von Selenium über den Chrome-Treiber. Übergeben Sie ChromeOptions als Argument beim Erstellen eines Chrome WebDriver und geben Sie den Pfad und die Argumente von Chrome an, die darin ausgeführt werden sollen.

Umgebung

Die Umgebung, die ich ausprobiert habe, ist wie folgt.

Vorbereitung

Annahme: Python 3.6 ist installiert.

  1. Installieren Sie Google Chrome Canary (sollte nicht benötigt werden, sobald "--headless" auf dem Stable-Kanal verfügbar ist). .. Canary kann mit Stable koexistieren.
  2. Laden Sie ChromeDriver herunter und platzieren Sie es in Ihrem PATH.
  3. Installieren Sie Selenium (verwenden Sie hier eine virtuelle Umgebung).
(venv) $ pip install selenium

Beispielcode

Führen Sie eine Google-Suche durch. Ich habe den Beispielcode von Python Crawling & Scraping geändert und den Teil, der PhantomJS verwendete, durch Headless Chrome ersetzt.

selenium_google.py


import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

options = Options()
#Chrome-Pfad (auf dem stabilen Kanal)--Es sollte unnötig sein, wenn kopflos verfügbar wird.
options.binary_location = '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'
#Aktivieren Sie den Headless-Modus (kommentieren Sie die nächste Zeile aus, um den Bildschirm anzuzeigen).
options.add_argument('--headless')
#Erstellen Sie ein Chrome WebDriver-Objekt.
driver = webdriver.Chrome(chrome_options=options)

#Öffnen Sie den oberen Google-Bildschirm.
driver.get('https://www.google.co.jp/')

#Im Titel'Google'Stellen Sie sicher, dass dies enthalten ist.
assert 'Google' in driver.title

#Geben Sie den Suchbegriff ein und senden Sie.
input_element = driver.find_element_by_name('q')
input_element.send_keys('Python')
input_element.send_keys(Keys.RETURN)

time.sleep(2)  #Im Fall von Chrome wird der Übergang mit Ajax erfolgen. Warten Sie daher vorerst 2 Sekunden.

#Im Titel'Python'Stellen Sie sicher, dass dies enthalten ist.
assert 'Python' in driver.title

#Mache ein Bildschirmfoto.
driver.save_screenshot('search_results.png')

#Suchergebnisse anzeigen.
for a in driver.find_elements_by_css_selector('h3 > a'):
    print(a.text)
    print(a.get_attribute('href'))

driver.quit()  #Beenden Sie den Browser.

Als ich Folgendes ausführte, wurden die Suchergebnisse ausgegeben, ohne den Browserbildschirm anzuzeigen.

(venv) $ python selenium_google.py
Python -Wikipedia
https://ja.wikipedia.org/wiki/Python
Python-Tutorial - Python 3.6.1 Dokument
http://docs.python.jp/3/tutorial/
Python-Grundkurs(1 Was ist Python?) - Qiita
http://qiita.com/Usek/items/ff4d87745dfc5d9b85a4
10 Inhalte, mit denen auch Anfänger Python fast kostenlos lernen können-Paiza Entwicklungstagebuch
http://paiza.hatenablog.com/entry/2015/04/09/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E3%81%BB%E3%81%BC%E7%84%A1%E6%96%99%E3%81%A7Python%E3%82%92%E5%8B%89%E5%BC%B7%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%8410
[Muss für Anfänger gesehen werden] Was ist Python? Gründliche Erklärung der Sprachmerkmale, des Anteils und des Arbeitsmarktes|Samurai...
http://www.sejuku.net/blog/7720
Lass dich nicht von Python beißen:Liste der Sicherheitsrisiken, auf die Sie achten müssen|Programmierung...
http://postd.cc/a-bite-of-python/
Was ist Python?-Hatena-Schlüsselwort-Hatena Tagebuch
http://d.hatena.ne.jp/keyword/Python
Lernseite von der Einführung bis zur Anwendung von Python
http://www.python-izm.com/
Lernen mit Python Eine Einführung in die Programmierung anhand der Grundlagen(1)Programmieren mit Python...
http://news.mynavi.jp/series/python/001/
Download Python | Python.org
https://www.python.org/downloads/

Unterschiede zu PhantomJS usw.

Zusammenfassung

Zumindest unter OS X könnte ich Headless Chrome problemlos verwenden. Es wäre noch einfacher, wenn es auf dem stabilen Kanal verwendet werden könnte. Wenn Sie die Option "--headless" entfernen, wird der Bildschirm angezeigt. Ich bin daher froh, dass das Debuggen einfach zu sein scheint.

Recommended Posts

Ich habe versucht, Headless Chrome von Selenium zu verwenden
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, Web-Scraping mit Python und Selen
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe versucht, PySpark von Jupyter 4.x auf EMR zu verwenden
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
[AWS] Ich habe versucht, EC2, RDS, Django zu verwenden. Umweltbau ab 1
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
[Python Scraping] Ich habe versucht, Google Search Top10 mit Beautifulsoup & Selenium
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, mit dem Server-Client über tmux zu kommunizieren
Ich habe versucht, Aufgaben bei Sellerie in die Warteschlange zu stellen
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit OpenPose eine Schildkrötenwelle zu schießen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Tipps zur Verwendung von Selen und Headless Chrome in einer CUI-Umgebung
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen
Ich habe versucht, Konversationsdaten von ASKfm zu kratzen
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen