WebDriver
Selenium
Python3

seleniumで動的なページのソースコードを取得する

ブラウザに表示しているソースコードを取得するのに手間取ったのでメモ。

import selenium

...
source = driver.page_source
...

こんな人が対象

・このコードだとURLに飛びなおすため?ブラウザで表示されているソースコードを取得することができない人。

・静的なサイトならこの命令でも十分だが、動的なサイトの場合、目的としたデータを取得できない人。

・たとえばツイッター、ニコニコ動画などスクロールすると勝手に遷移するページのスクレイピングで困ってる人。


用意

python3

selenium

webdriver(導入は各自で)


方法


  • ステップ1

C:\ > "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="C:\hoge "

・末尾のuser-dataは必要らしいです。これがないとブラウザ起動しませんでした。


  • ステップ2

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = r'C:~\chromedriver.exe'
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
print(driver.title)
print(driver.page_source)
'''---------------------
ブラウザを操作するコードを記述
---------------------'''
driver.quit()


まとめ

・表示中のソースコードを取得することができる。

・pythonからsubprocessモジュールを使い 「ブラウザ起動→ブラウザ操作」をコントロールしようとしたがうまくいかなかった。

・いちいちブラウザを起動してからpythonに入るしかない?


参考

teratail - python selenium chromeで現在表示しているソースの取得

(*2) teachmeselenium - how to connect selenium...


(*2)

起動中のブラウザにseleniumをつなげる方法

手動でひらかれたブラウザを操作したいことがある。

-ケースとしては…

・自動操作する前に、手動操作が必要なとき。たとえばcaptcha(操作者がロボットか判断する)を操作したあとに自動化する場合

・デバッグするとき。まだ目的のページまで行くスクリプトが完成していない時に、手動で目的のページに移動して、その後に自動化スクリプトを試す場合。

Chrome DevTools Protocolを使うことでいろいろチェックしたり、デバッグすることができる。

chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"

これでchromeを起動することによってポートを開放することができる。

また、ユーザーディレクトリを新たに作ることで、既存のユーザーデータを改変しないですむ。

PATHにchromeをいれるのも忘れずに。

以下いろいろ書かれていますが、「マニュアル起動→自動実行」を対象とした方法のようです。

勝手に遷移するページのスクレイピング方法を知ってるよっていう人がいらっしゃいましたら、ぜひご教授ください。

よろしくお願いします。