Go言語で「agouti」というライブラリを使用し、WebDriverを「ChromeDriver」にしてChromeを動かすとき、「ChromeOptions」を設定してなにかしらの制御ができる
ChromeOptionsを設定することで、
「PDFのURLにアクセスしたときにブラウザで表示せず、ダウンロードする」ことができる
以前、pythonでChromeDriverを使ってPDFをダウンロードする物を作った
pythonの参考ページ→「Selenium3のChromeDriverでpdfをダウンロードする」
で、Go言語のときのChromeOptionsの設定の書き方を調べた結果、下の記述で同様に動かせたのでメモ
package main import ( "github.com/sclevine/agouti" "time" ) func main() { agoutiDriver := agouti.ChromeDriver( // ここでChromeOptions agouti.ChromeOptions("prefs", map[string]interface{}{ "download.default_directory": "D:\\",// 保存先を「Dドライブ直下」に指定している "download.prompt_for_download": false, "download.directory_upgrade": true, "plugins.plugins_disabled": "Chrome PDF Viewer", "plugins.always_open_pdf_externally": true, }), agouti.ChromeOptions("args", []string{ "--disable-extensions", "--disable-print-preview", "--ignore-certificate-errors", }), // ここまで agouti.Debug, ) agoutiDriver.Start() defer agoutiDriver.Stop() page, _ := agoutiDriver.NewPage() page.Navigate("http://example.com/sample.pdf")// URLは記述例なので、適当に変えて time.Sleep(10 * time.Second) }
ChromeOptionsの説明:「Capabilities & ChromeOptions – ChromeDriver – WebDriver for Chrome」
上記のサイトのページの上から半分くらいにある「chromeOptions object」の項目に「agouti.ChromeOptions(“args”, ***)」で指定している「”args”」などの説明がある
自分のコードを例に、使っている「”args”」と「”prefs”」は以下のように書いた
「”args”」は「Type」が「list of strings」なので、Go言語の「[]string{}」
「”prefs”」は「Type」が「dictionary」なので、Go言語の「map[string]interface{}」
調べてた時に参考になったページ→「Support headless Google Chrome (and Chromium) · Issue #109」
1つ困っていることがあって、
「ダウンロード中にブラウザを閉じるとダウンロード失敗になるので、ダウンロードが終わるまで待機する」みたいな方法を知らないので
31行目に「time.Sleep(10 * time.Second)」(10秒待つ)記述をしている
わかったら書く()
コメントを残す