【Python】seleniumのcookieをrequestsで使う

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にセットしているだけです。


Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/wp-includes/class-wp-comment-query.php on line 405

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です