ChromeDriverでファイルダウンロードするSeleniumスクリプトを書いたとき、非Headlessモードでは成功するのに、Headlessモードで失敗した件のメモ
tl;dr
Headlessモードの場合、
target=_blank
なアンカーをclick()
してもファイルダウンロードできないtarget
属性を削除してclick()
するとダウンロードできる
前準備
基本は前の記事と同じです
当たり前ですが、docker上では非Headlessモードでは動作させられないので注意
スクリプト
コマンドライン引数でHeadlessモードのON/OFFを替えられるようにしています
検証
ex.) 非Headlessモードで動作
python scraping.py
ex.) Headlessモードで動作
python scraping.py --headless=True
非Headlessモードでは、sample_zengin.csv
がダウンロードできますが、Headlessモードではダウンロードされません。
対処
↓では、同じくアンカーをclick()
することでファイルダウンロードに成功しています
この違いは、ダウンロードに失敗したページのアンカーにはtarget=_blank
があったことで
target
属性を削除し、アンカーをclickするようにします
変更点は、L.35の追加のみです
これで、Headlessモードでもファイルダウンロードができようになりました
あまり良い例じゃないですが、挙動から原因を切り分けにくくなかなか面倒だったので、覚えておくといいことあるかも