MAGAZINE
ルーターマガジン
chrome_remote を使って、Google Chrome 以外のブラウザも自動操縦してみる
みなさま、こんにちは、エンジニアの Hodoshima です。 弊社では、ブラウザを用いた自動操縦を行う際には、ruby の chrome_remote というライブラリを用いて Google Chrome の自動操縦を実現しています。 しかし、実際お業務では Google Chrome だけでは課題を解決できない場面が発生します。
そんな日々の課題の中には、Chrome以外の別のブラウザを用いた自動操縦との併用で課題を回避できた事例がありますので、chrome_remote を用いて Google Chrome 以外のブラウザを自動操縦する方法をご紹介します。
chrome_remote とは
chrome_remote とは、 ruby の gem であり、Chrome DevTools Protocol(CDP) を解することによって、Chromium系ブラウザの操作を自動化することができます。
chrome_remoteのメリットと機能
この手法を使うことのメリットとしては、CDP によってマウスやキーボードなどの様々な操作を行うことができ、実際に人間が行うような操作を実現することができます。また、我々人間が使っているブラウザを使ってクロールしていることから、BOT 検知の判定を受けにくいというメリットもあります。
Chrome RemoteでGoogle Chromeを操作する準備
CDP を使うにはブラウザ側で、ブラウザ側で debugging-port
というポートを開けておく必要があります。chrome_remote ではデフォルトで debugging-port=9222
としてブラウザを探しにいくため、ブラウザ側ではあらかじめ remote-debugging-port=9222
を設定してブラウザを起動させる必要があります。
以下に各OSごとの Google Chrome 起動コマンドの例を挙げておきます。
▼ Windows での Google Chrome 起動コマンドの例
C:/Program Files/Google/Chrome/Application/chrome.exe --remote-debugging-port=9222
▼ Mac での Google Chrome 起動コマンドの例
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
▼ Linux での Google Chrome 起動コマンドの例
google-chrome --remote-debugging-port=9222
chrome_remote で Google Chrome の自動操縦をしてみた
ここではまず chrome_remote を用いた Google Chrome の自動操縦を行ってみます。
まず、以下のプログラムを作成して保存します。ここでは code.rb
という名前で保存することにします。
require 'chrome_remote'
# ブラウザの立ち上げ
browser = ChromeRemote.client
browser.send_cmd("Page.enable")
# rooter のページへ遷移
rooter_url = 'https://rooter.jp/'
browser.send_cmd('Page.navigate', url: rooter_url)
# タイトルの取得
sleep 1
title = browser.send_cmd('Runtime.evaluate', expression: 'document.title', returnByValue: true)&.dig('result', 'value')
puts title
次に、chrome_remote ライブラリをあらかじめ gem
や bundle
コマンドでインストールしておきます。また、先ほどの例などを参考にして、Google Chrome を debuggin-port 付きで起動させておきます (すでに Google Chrome が起動している状態で debuggin-port 付きで起動させようとすると、元々開いているブラウザが原因で debugging-port つきのものが起動しない可能性があります)。
そして、code.rb
を実行することで、debugging-port 付きで起動させた Google Chrome が 弊社のトップページ へ遷移し、ページタイトルを出力、標準出力までを自動で行ってくれます。
% ruby code.rb # bundle で chrome_remote をインストールした場合は bundle exec ruby code.rb でプログラムを実行
株式会社ルーター – データクローリング・スクレイピングによるビッグデータ収集
Braveブラウザでもchrome_remoteで自動操縦してみた
ここからがこの記事の本題です。先ほどは CDP を用いてGoogle Chrome を自動操縦しましたが、CDP は Google Chrome に限らず、Chromium 系のブラウザの多くに搭載されています。
そのため、Chromium 系のブラウザであれば、chrome_remote を用いた自動操縦ができる可能性があります。
ここでは、Chromium 系のブラウザの例として Brave を紹介します。
Brave とは、Firefox 開発元の共同創立者が開発に携わっているプライバシー保護に特化したブラウザです。また、以下のような特徴があります。
- 広告やトラッキングのブロック
- Brave に許可された広告を見ると、仮想通貨の BAT が手に入る (1 ヶ月あたり1 BAT (=約 23 円) 程度)
- 広告をブロックしているため、ページの表示が早くなったり、通信量が削減する
- プライバシー保護機能に関する機能が多く提供されており、非常に高い評価を受けている
そんな Brave ですが、先ほども述べた通り、Google Chrome と同じ Chromium をベースとして設計されています。そのため、Google Chrome との類似点が多くみられます。その類似点の中には、コマンドラインにおける実行オプションが一致していることも含まれます。
Braveをchrome_remoteで操作する方法
Brave にも debugging-port は実装されています。 Mac では、Brave をインストールした後は以下のようなコマンドを一例として実行することができます。
/Applications/Brave\ Browser.app/Contents/MacOS/Brave\ Browser --remote-debugging-port=9222
そして、chrome_remote を使った Brave の自動操縦コードについてですが、実は Google Chrome の自動操縦で使ったコードを何も書き換えることなく、最初に Google Chrome ではなく、Brave を立ち上げる変更点のみでそのまま使うことができます。
▼Brave でのクローリング中
起動するブラウザを Google Chrome か Brave かどちらかで行うかを管理することができれば、2 つのブラウザを併用したクローリングが可能となります。
まとめ
ブラウザを使ったクローリングの際に用いるブラウザといえば Google Chromeというのが一般的かと思います。
しかし、今回の検証で Chromium 系のブラウザであれば、debugging-port を経由することによって、これまで通りのコードで自動操縦することができることができました。
これによって、クローラー設計における選択肢としてブラウザの判断材料を獲得することができました。
この記事を参考にして、皆さんも快適なクローリング生活をお過ごしください、
ご覧いただきありがとうございました。
CONTACT
お問い合わせ・ご依頼はこちらから