[PYTHON] J'ai essayé d'utiliser Headless Chrome de Selenium

** 6 mai 2018: j'ai écrit un nouvel article qui correspond à la situation actuelle après que Headless Chrome soit devenu stable. Voir aussi ici. ** **

L'autre jour, Vitaly de PhantomJS a parlé de l'histoire de sa retraite en tant que responsable. PhantomJS m'a aidé à utiliser facilement un navigateur sans tête. Je veux que vous utilisiez Headless Chrome à l'avenir, alors je l'ai essayé.

Je peux trouver de nombreux exemples qui utilisent Node.js, mais je voulais utiliser Python pour diverses raisons, donc ici, j'utiliserai Headless Chrome via Selenium.

Qu'est-ce que Headless Chrome?

C'est un mode qui fonctionne sans afficher l'écran, qui sera disponible depuis Google Chrome 59. Utile pour les tests automatisés et le web scraping.

Depuis le 28 avril 2017, il semble être disponible sur les versions Mac et Linux des canaux Dev ou Canary. Je l'ai essayé sur la version Mac du canal Canary. Je l'ai également essayé sur la version Windows du canal Canary, mais l'écran était affiché même si je spécifiais --headless. Je pense qu'il sera bientôt disponible [^ 1].

[^ 1]: Référence: https://bugs.chromium.org/p/chromium/issues/detail?id=712981

Pour le moment, il est facile à utiliser depuis chrome-remote-interface de Node.js, et il y a beaucoup d'informations, vous devriez donc l'essayer à partir d'ici. Faisons le.

En passant, il semble qu'il existe de nombreux exemples d'utilisation de Chrome sur un écran virtuel tel que Xvfb sans tête depuis longtemps. Lorsque vous recherchez sur Google, vérifions quel sens il est utilisé.

Utilisez le chrome sans tête de Selenium

Ce n'est pas parce qu'il est sans tête que c'est très différent de l'utilisation de Chrome ordinaire. Utilisez Chrome depuis Selenium via le pilote Chrome. Transmettez ChromeOptions en tant qu'argument lors de la création d'un Chrome WebDriver et spécifiez le chemin d'accès et les arguments de Chrome à y exécuter.

environnement

L'environnement que j'ai essayé est le suivant.

Préparation

Hypothèse: Python 3.6 est installé.

  1. Installez Google Chrome Canary (ne devrait pas être nécessaire une fois que «--headless» est disponible sur le canal Stable) .. Canary peut coexister avec Stable.
  2. Téléchargez ChromeDriver et placez-le dans votre PATH.
  3. Installez Selenium (utilisez un environnement virtuel ici).
(venv) $ pip install selenium

Exemple de code

Faites une recherche sur Google. J'ai modifié l'exemple de code de Python Crawling & Scraping et remplacé la partie qui utilisait PhantomJS par Headless Chrome.

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()
#Chemin Chrome (sur le canal stable)--Cela devrait être inutile lorsque le headless devient disponible
options.binary_location = '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'
#Activez le mode sans tête (commentez la ligne suivante pour voir l'écran).
options.add_argument('--headless')
#Créez un objet Chrome WebDriver.
driver = webdriver.Chrome(chrome_options=options)

#Ouvrez l'écran supérieur de Google.
driver.get('https://www.google.co.jp/')

#Dans le titre'Google'Assurez-vous que cela est inclus.
assert 'Google' in driver.title

#Entrez le terme de recherche et envoyez.
input_element = driver.find_element_by_name('q')
input_element.send_keys('Python')
input_element.send_keys(Keys.RETURN)

time.sleep(2)  #Dans le cas de Chrome, il passera avec Ajax, alors attendez 2 secondes pour le moment.

#Dans le titre'Python'Assurez-vous que cela est inclus.
assert 'Python' in driver.title

#Prendre une capture d'écran.
driver.save_screenshot('search_results.png')

#Afficher les résultats de la recherche.
for a in driver.find_elements_by_css_selector('h3 > a'):
    print(a.text)
    print(a.get_attribute('href'))

driver.quit()  #Quittez le navigateur.

Lorsque j'ai exécuté ce qui suit, les résultats de la recherche ont été générés sans afficher l'écran du navigateur.

(venv) $ python selenium_google.py
Python -Wikipédia
https://ja.wikipedia.org/wiki/Python
Tutoriel Python - Python 3.6.1 document
http://docs.python.jp/3/tutorial/
Cours de base Python(1 Qu'est-ce que Python?) - Qiita
http://qiita.com/Usek/items/ff4d87745dfc5d9b85a4
10 contenus que même les débutants peuvent étudier Python presque gratuitement-journal de développement paiza
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
[À voir pour les débutants] Qu'est-ce que Python? Explication approfondie des caractéristiques linguistiques, de la part et du marché du travail|samouraï...
http://www.sejuku.net/blog/7720
Ne soyez pas mordu par Python:Liste des risques de sécurité à surveiller|la programmation...
http://postd.cc/a-bite-of-python/
Qu'est-ce que Python-Mot-clé Hatena-Journal Hatena
http://d.hatena.ne.jp/keyword/Python
Site d'apprentissage de l'introduction à l'application de Python
http://www.python-izm.com/
Apprendre avec Python Une introduction à la programmation à partir des bases(1)Programmation avec Python...
http://news.mynavi.jp/series/python/001/
Download Python | Python.org
https://www.python.org/downloads/

Différences avec PhantomJS, etc.

Résumé

Au moins sur OS X, je pourrais facilement utiliser Headless Chrome. Ce serait encore plus facile s'il pouvait être utilisé sur le canal Stable. Si vous supprimez l'option --headless, l'écran sera affiché, donc je suis heureux qu'il semble facile à déboguer.

Recommended Posts

J'ai essayé d'utiliser Headless Chrome de Selenium
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé le web scraping en utilisant python et sélénium
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
J'ai essayé d'utiliser PySpark de Jupyter 4.x sur EMR
J'ai essayé de lire les données d'un fichier en utilisant Node.js.
J'ai essayé d'utiliser AWS Chalice
J'ai essayé d'utiliser l'émojinateur Slack
[AWS] J'ai essayé d'utiliser EC2, RDS, Django. Construction de l'environnement à partir de 1
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
[Python scraping] J'ai essayé la recherche Google Top10 en utilisant Beautifulsoup et sélénium
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé de communiquer avec le client serveur en utilisant tmux
J'ai essayé la mise en file d'attente des tâches de Celery
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé de photographier une vague de tortue en utilisant OpenPose
J'ai essayé d'utiliser l'API checkio
J'ai essayé le traitement asynchrone en utilisant asyncio
Conseils d'utilisation de Selenium et Headless Chrome dans un environnement CUI
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc Préparation 1
J'ai essayé de récupérer les données de conversation d'ASKfm
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow