seleniumは重いのでログイン処理など動的な値の生成が必要な時だけ使いたい。
ログインした後はrequestsとかでサクッと処理したい、そんな時にはcookieの受け渡しが必要になります。
受け渡すのは意外と簡単で、例えばニコニコ動画にseleniumでログインしてrequestsでマイリストを取得したい時は、
# -*- coding:utf-8 -*-
import os
import requests
from selenium import webdriver
def get_mylist(login_id, password):
# ログインを行う
login_page_url = "https://account.nicovideo.jp/login"
if os.name == "nt":
phantomjs_path = "node_modules/phantomjs/lib/phantom/bin/phantomjs.exe"
else:
phantomjs_path = "node_modules/phantomjs/bin/phantomjs"
try:
driver = webdriver.PhantomJS(phantomjs_path)
except FileNotFoundError:
print("PhantomJSの実行バイナリが見つかりませんでした。\n"
"npm install phantomjs \n"
"を実行してインストールしてください。")
return
driver.get(login_page_url)
login_id_form = driver.find_element_by_id("input__mailtel")
password_form = driver.find_element_by_id("input__password")
submit_button = driver.find_element_by_id("login__submit")
login_id_form.send_keys(login_id)
password_form.send_keys(password)
submit_button.submit()
# cookieの受け渡し
session = requests.session()
for cookie in driver.get_cookies():
session.cookies.set(cookie["name"], cookie["value"])
# requestsで取得
mylist_url = "http://www.nicovideo.jp/api/deflist/list"
response = session.get(mylist_url)
print(response.text)
if __name__ == "__main__":
get_mylist("your_id", "your_password")
のように実現できます。
なお、コードはほとんど前回の記事の流用なので、PhantomJSなどのセットアップなどについてはそちらを参照してください。
また、クッキーを受け渡す処理は
session = requests.session()
for cookie in driver.get_cookies():
session.cookies.set(cookie['name'], cookie['value'])
のみで、PhantomJSからdict型のcookieを取得し、requestsのcookiejarにセットしているだけです。