
PythonでSeleniumを使うと、Google Chromeを自動操作することが可能です。実際にChromeが画面上に立ち上がる動作をしますが、決まった操作であればあえてPC画面に表示させる必要はありません。ここではSeleniumでChromeを使う時に画面に何も表示させないヘッドレス起動の方法を紹介します。
こんにちは。wat(@watlablog)です。
Selenium関係もかなり慣れて来ましたが、ここではスクレイピング時にブラウザを画面に表示させないヘッドレス起動の方法を紹介します!
Chromeをヘッドレスで起動させるメリット
①実行中に干渉できないので同じPCで同時作業ができる
SeleniumでGoogle Chromeを操作する場合でも、ユーザはブラウザに干渉することが出来てしまいます。
例えばWebサイトを攻撃しないようにプログラム上で待機させている時に、画面をスクロールさせてみたり、リンクをクリックしてみたりといった行動が可能です。
故意でなくても、マウス操作の最中に意図せずそのような操作をしてしまうこともあるでしょう。するとプログラム開発者が予期していないアクションによりエラー終了してしまう可能性もあります。
ヘッドレスモードとしてChromeを立ち上げれば、ユーザはそのような操作をすることが出来なくなるため、外乱の少ない処理が可能になります。
②実行速度が速くなる?→検証しました。
Chromeをヘッドレスモードで起動させることで、PCがブラウザを表示しなくなるため、その分処理速度が速くなると言われています。
プログラムはできるだけ速く動作させた方が良いのは明白ですので、このメリットは非常に嬉しいですね。
本記事では実際にWebスクレイピングを行うプログラムを使って、ヘッドレスモードの有無によるプログラム処理時間を計測してみましたが、やはり言われていることは正しかったようです。
記事の最後の方にグラフを載せましたが、例題のプログラムではヘッドレスモードにすることで約6.7%ほど処理時間が速くなりました。
Python/SeleniumでChromeをヘッドレス起動させるコード
事前準備
このページでは、Pythonの外部パッケージであるseleniumとchromedriver-binaryを使います。これらのインストールからプログラム例までの説明は「PythonでGoogle検索タイトルとURL一覧を抽出してみた」の「2.1.事前準備」に記載しましたので、予備知識が不足していると感じた場合は是非こちらの記事も参照してみて下さい。
ヘッドレス化はオプションで指定する
Chromeのブラウザをプログラム実行中に画面に表示させないヘッドレスモードで起動する方法は、「SeleniumのChromeをシークレットモードで起動する」で指定した時と同じOptionsを使います。
そのため、import文にもOptionsが必要になります。
ヘッドレスモードのオプション引数は'--headless'です。今回はヘッドレスモードだけしか書いていませんが、シークレットモードとの併用も可能です。オプションを併用する場合はadd_argumentを複数行にわたって書いて下さい。
以下にimportからwebdriverの準備までのコードを示します。
ヘッドレスモードでWebスクレイピングをする方法
それでは実際にヘッドレスモードでWebスクレイピングするコードを使ってみましょう。そして、プログラム処理時間の計測を行い、ヘッドレスモードを使った時と使わない時でどの程度差が出るのかを確認してみます。
以下が全コードです。処理時間計測の方法は「Pythonプログラムの処理にかかる時間を計測する方法」で紹介した内容をそのまま使っています。
【実験結果】ヘッドレスモードで起動すると少し処理速度が速くなる
以下の図は上記コードでヘッドレスモードで起動した場合と、ヘッドレスを使わない通常モードで起動した場合の処理時間を比較したグラフです。
ヘッドレスモードは通常モードよりも約6.7%処理時間が速いという計測結果が得られました。
今回は10回の測定結果の平均を示していますが、この時点で標準偏差は共に0.4sくらいだったので、十分有意差と言って良いのではないかと思います。

まとめ
本ページではSeleniumでGoogle Chromeをヘッドレスモードとして立ち上げるメリットとオプションで指定する方法を説明しました。
Webスクレイピングをするサンプルコードを使ってヘッドレスモードを使うと、使わない時と比べて2sほど(約6.7%)処理時間が改善するという結果を得ました。
外乱の影響の少ない、そして処理時間が速くなる(必ずしも速くなるとは言い切れていないので、実際に計測して確認する必要はあります。)ヘッドレスモードを是非使ってみて下さい。
様々なオプションを使いこなすと快適に、そして効率よくスクレイピングをすることが出来そうですね!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!