Created 2018年8月22日17:29
Updated 2018年8月23日15:53
Categories
Python
スクレイピング
Chromeのデベロッパーツールから取れるHARファイルはWebサイトの挙動を見る際にとても役に立ちます。
色々なWebサイトのHARを取得したかったのですが、いちいちWebサイトを開いてデベロッパーツールから取得するのはあまりにも面倒すぎます。
そこで、HARファイルを取得できるスクリプトを作成しました。
Seleniumを使ってharを取得する場合、brousermob-proxyを使うと良いようです。
webdriverを作成する際にプロキシとして渡すことで、トラフィック情報などを保持してくれます。
こちらのサイトから、brousermob-proxyのバイナリをダウンロードしてください。
以下スクリプトのproxy_pathに解凍したバイナリのパスを指定して下さい。
from browsermobproxy import Server
from selenium import webdriver
import json
from pathlib import Path
import time
class GetWebPageHar:
proxy_path = "browsermob-proxy-2.1.4/bin/browsermob-proxy.bat"
def __init__(self):
self.server = Server(str(Path(self.proxy_path).absolute()))
self.server.start()
self.proxy = self.server.create_proxy()
def get_har(self, url, output_filename):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(self.proxy.proxy))
chrome_options.add_argument("--ignore-certificate-errors")
chrome_options.add_argument("--incognito")
driver = webdriver.Chrome(chrome_options=chrome_options)
self.proxy.new_har("google")
driver.get(url)
time.sleep(10)
har_json = json.dumps(self.proxy.har, indent=4, ensure_ascii=False)
with open(output_filename, "w") as f:
f.write(har_json)
driver.quit()
def stop(self):
self.server.stop()
if __name__ == "__main__":
getter = GetWebPageHar()
getter.get_har("https://www.google.com", "test_har.json")
getter.stop()
get_har関数でHARファイルを取得します。
ただ、プロキシ経由なのでSSLエラーが出てしまいます。
かなり気になるので、ガッツリ使う場合は改善したいと思います。