概要
Go言語でSeleniumを使おうという記事です。
基本的な使い方と、安定稼働させるためのWeb Driverのオプションを紹介しています。
オプションについてはどのプログラム言語でも同じですので、PythonやJavaをお使いの方でも同じオプションが使えます。
事前準備
Seleniumを使うのに必要な準備はどのプラットフォームでも同じでしょう。
今回はGoogle Chromeを使いますので、Google Chrome本体のインストールと、Google ChromeのWeb DriverをダウンロードしてPath配下に配置しておきます。
google chrome webdriverダウンロード
基本的な使い方
GoでSeleniumを扱うのには、agouti というライブラリが定番です。
以下は一番簡単なサンプルとして、googleを表示して、タイトルを表示するだけのものです。
package main
import (
"fmt"
"github.com/sclevine/agouti"
)
func main() {
// chromeを起動
driver := agouti.ChromeDriver()
driver.Start()
defer driver.Stop() // chromeを終了
page, _ := driver.NewPage()
page.Navigate("https://www.google.com/")
fmt.Println(page.Title()) // 表示: Google <nil>
}
Google検索してみる
画面のコントロール方法の説明です。
簡単なサンプルとして、Googleのホームページを表示してgolang
と検索してみます。
要素はquerySelectorの形式で指定できます。
page.Navigate("https://www.google.com/")
// 検索フォームに文字を入力し、検索。要素はセレクタで指定する
page.First("input[type='text']").Fill("golang") // golangと入力
page.FindByID("gbqfbb").Click() // 検索ボタンをクリック
FirstやFindByIDは1要素だけを取得するメソッドですが、複数取得する FindやAll等もあります。
詳しくは agouti のソースをご覧ください。
Alertのポップアップを消す
js:alert() を消す方法。
消さないと別ページへ遷移してもポップアップが消えず、想定した操作が出来なくなります。
page.ConfirmPopup() // ok を押す
page.CancelPopup() // キャンセルを押す
以上で簡単な使い方についてはマスターできたと思います。
次に安定稼働させるためのオプションを見ていきます。
安定稼働させるためのオプション
マシンのスペックが低い場合、安定稼働せず落ちたり止まったりすることがありますが、
driver 取得時にオプションを指定することで、リソースを節約するような設定でブラウザを起動できます。
例えば画像を読み込まない設定ができたり、画面自体を表示せずに起動できます。
ヘッドレスモード
画面を表示しない。
画面を目視で確認する必要がない場合に指定しましょう。
driver := agouti.ChromeDriver(
agouti.ChromeOptions(
"args", []string{
"--headless", // headlessモードの指定
"--disable-gpu", // headlessモードの指定
}),
)
その他のオプション
他にもよく使うものとして以下のようなオプションがあります。
driver := agouti.ChromeDriver(
agouti.ChromeOptions(
"args", []string{
"--no-sandbox",
"--disable-dev-shm-usage", // /dev/shmパーティションの使用を禁止し、パーティションが小さすぎることによる、クラッシュを回避する。 dockerなどのVM環境下では、設定したほうがクラッシュする確率が減る。
"window-size=500,400", // 画面を小さく
"--blink-settings=imagesEnabled=false", // 画像を読み込まない
"lang=ja",
"--disable-desktop-notifications",
"--ignore-certificate-errors", // sslまわりのエラーを許容する
"--disable-extensions", // Extensionを利用しない
"--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1')", // UAの設定。ここではiPhoneに偽装している
}),
)
こちらも参考に。chromeDriver全オプション