定期的なスクレイピングプログラムを動かしていると、邪魔な場合があります。
そこで今回はヘッドレスモードを使ってChromeブラウザを非表示(Headless Chrome)にしてスクレイピングする方法をご紹介します。
普通にwebdriverを使ってスクレイピングすると、こんな感じのコードでデータを取得すると思います。
#ライブラリやモジュールを使用するにはimportを使います
from selenium import webdriver
#webdriverを間違えないように指定します。
driver = webdriver.Chrome("C:\webdriver\chromedriver.exe")
#Chrome上でURLを指定してGETリクエスト・このURLを開きます。
driver.get("https://www.google.com/?hl=ja")
#検索窓のxpathを指定
element = driver.find_element_by_xpath("//*[@id='tsf']/div[2]/div[1]/div[1]/div/div[2]/input")
#pythonと入力
element.send_keys("python")
#エンターを押します。
element.send_keys('\n')
#検索1番目を取得
element = driver.find_element_by_xpath("//*[@id='rso']/div/div/div[1]/div/div/div[1]/a/h3")
print(element.text)
# ドライバを閉じるChromeも終了する
driver.close()
※これは「python」というワードでグーグル検索して一番上のサイトのタイトルを取得するプログラムです。
これを非表示で行うにはヘッドレスモードを使う必要があるのでchromedriver-binaryをインストールします。
コマンドプロンプトで以下を入力して下さい。
>> pip install chromedriver-binary
これをインストールすると以下コードが実行できるようになります。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#ヘッドレスモードに必要なモジュール
import chromedriver_binary
# オプションの作成
option = Options()
# ヘッドレスモードの設定
option.add_argument('--headless')
# Chromeをヘッドレスモードにする
driver = webdriver.Chrome(options=option)
#Chrome上でURLを指定してGETリクエスト・このURLを開きます。
driver.get("https://www.google.com/?hl=ja")
#検索窓のxpathを指定
element = driver.find_element_by_xpath("//*[@id='tsf']/div[2]/div[1]/div[1]/div/div[2]/input")
#pythonと入力
element.send_keys("python")
#エンターを押します。
element.send_keys('\n')
#検索1番目を取得
element = driver.find_element_by_xpath("//*[@id='rso']/div/div/div[1]/div/div/div[1]/a/h3")
print(element.text)
# ドライバを閉じるChromeも終了する
driver.quit()
これでブラウザを開くことなく、一番上のサイトのタイトルを取得することが出来ます。
■オプション
使いそうなChromeは非表示だけではないので簡単にまとめておきます。
(本当はまだまだ大量にあります。)
#ブラウザ非表示
option.add_argument('--headless')
# スクロールバー非表示
options.add_argument('--hide-scrollbars')
# シークレットモード指定
options.add_argument('--incognito')
# ユーザーエージェント指定
options.add_argument('--user-agent=hogehoge')
# 言語指定
options.add_argument('--lang=ja')
# SSLセキュリティを緩くする
options.add_argument('--ignore-certificate-errors')
# 画像を読み込まない
options.add_argument('--blink-settings=imagesEnabled=false')
最高の6ヶ月!超実践型プログラミングスクール【.pro】