Seleniumでログイン後、POSTリクエストでjsonファイルを取得したいケースがあった。
調べたところSelenium自体にはPOSTリクエストする機能は無かったので、requestsにログイン時のセッションを渡し、そちら側で処理をすることにした。
(下記はChromedriverの場合)
driver = webdriver.Chrome()
#~ログイン処理~
session = requests.session()
#セッションの受け渡し
for cookie in driver.get_cookies():
session.cookies.set(cookie["name"], cookie["value"])
result = session.post(url,data=payload)
data = json.loads(result.text)
これでPOSTリクエストで取得できるようになった。
ちなみにGETリクエストでも、Selenium経由でjsonを取得したい場合はrequestsを使った方が綺麗に書ける。
Seleniumだとjsonにhtmlタグが付いて戻ってくるためBeautifulsoupを挟んで取得するといいが、それなら直接requestsで取得した方が余計なタグも付いてこないので良い。
一応Selenium+beautifulsoupで取得する場合を下記に記載する。
driver.get(url)
data = json.loads(BeautifulSoup(driver.page_source,"lxml").find("body").text)