Seleniumあれこれ
はじめに
Seleniumでちょっとあれこれした時のメモ
インストール
各種ドライバは環境に合わせて落とす
1$ pip install selenium
2$ wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_win32.zip
3$ unzip chromedriver_win32.zip
今回の要件
スクロールに合わせてコンテンツが読み込まれていくタイプのページで何が読み込まれていったのか知りたい
自動でスクロールさせる
SeleniumでJSを実行させることができるのでJSを流し込んでスクロールさせます
1from selenium import webdriver
2
3driver = webdriver.Chrome()
4driver.get("http://example.com")
5cmd = "document.querySelector(\".example_class\").scrollTo(0, 100);")
6driver.execute_script(cmd)
コンテンツの高さを取得する
同じくjsを実行して取得します
returnすると値をPython側でもらうことができます
1from selenium import webdriver
2
3driver = webdriver.Chrome()
4driver.get("http://example.com")
5cmd = "return document.querySelector(\".example_class\").scrollHeight;")
6height = driver.execute_script(cmd)
バックグラウンドでアクセスしたページを調べる
SeleniumはChromeのみPerformanceへのアクセスができるみたいなのでこれを使います
いろいろデータが取れるので各自確認していただきたいですがコンテンツの取得が完了した際に「Network.responseReceived」というmethodが呼ばれるみたいなのでこれを捕まえます
1from selenium import webdriver
2from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
3
4caps = DesiredCapabilities.CHROME
5caps["loggingPrefs"] = {"performance": "ALL"}
6driver = webdriver.Chrome(desired_capabilities=caps)
7
8driver.get("http://example.com")
9# スクロール処理
10for entry in driver.get_log("performance"):
11 d = json.loads(entry["message"])
12 if d["message"]["method"] == "Network.responseReceived":
13 res = d["message"]["params"]["response"]
14 if d["message"]["params"]["type"] == "Image":
15 print("画像", end="")
16 print(res["url"])
みたいな感じでレスポンスタイプが画像のやつだけ探したりできます