前提・実現したいこと
PythonでseleniumによりヘッドレスでChromeを操作し、任意のスプレッドシートを開く
発生している問題・エラーメッセージ
ヘッドレスでChromeを起動してスプレッドシートを開きたいのですが、ヘッドレスではない場合と比較してログイン画面が微妙に異なる画面が出てきてしまい、スクレイピングができない状態です。
ヘッドレス故にデベロッパーツールも開けず、困っています。
※ ヘッドレス/ヘッドレスでない場合の画面は後述
蛇足ですが、ヘッドレスで開く画面も手動で再現できずに困っています。
(Googleアカウント全部削除してもダメでした)
このため、
1.ヘッドレスだと異なる画面が出てくる理由
2.ヘッドレスで、そうでない場合と同じ画面を出す方法
3.ヘッドレスでもスプレッドシートを開く方法
以上三点のいずれかでもいいので、ご教示いただけますと幸いです。
該当のソースコード
1.ヘッドレス実行の場合
Python
1import chromedriver_binary 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4 5 6option = Options() 7option.add_argument('--headless') # ヘッドレスモードの設定を付与 8option.add_argument('--lang=ja-JP') 9 10drv = webdriver.Chrome(options=option) 11drv.get("開きたいスプレッドシートのURL") 12 13drv.save_screenshot("画面キャプチャ.png")
キャプチャした画面は以下です。
2.ヘッドレス実行でない場合
Python
1import chromedriver_binary 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4 5 6drv = webdriver.Chrome() 7drv.get("開きたいスプレッドシートのURL") 8 9drv.save_screenshot("画面キャプチャ.png")
キャプチャした画面は以下です。
試したこと
ヘッドレスでない状態で起動したときの xpath や css_slector を使用して find_element_by_xpath や find_element_by_css_selector を使用して各要素を叩いてみましたが、以下エラーがでました。(ヘッドレスではない場合は普通に通る)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#identifierId"} (Session info: headless chrome=83.0.4103.116)
また、find_element_by_xpath で要素を叩く前にtime.sleepなども入れてみましたが、結果は同じでした。
補足情報(FW/ツールのバージョンなど)
開発環境は以下です。
・OS: Windows10
・言語: Python 3.6
・IDE: PyCharm COMMUNITY 2020.1.2
・ブラウザ: Google Chrome 83.0.4103.116
・ブラウザ操作:selenium 3.141.0
・chromedriver-binary:83.0.4103.39.0
回答1件
あなたの回答
tips
プレビュー