ニコニコ動画にpython+selenium+PhantomJSでログイン

以前作成したニコニコ用のpythonスクリプトが動かなくなっていたので原因を調査。

どうやらログインの形式が変わったようで、古い方のログインページが削除されてしまったようです。

また、新しいログインページはJavascriptで動的にログイン情報を生成するため、今まで使っていたrequestsではうまくいきませんでした。

そこで、Javascriptなどの動的な要素を再現できるselenium+PhantomJSを用いてニコニコ動画にログインしてみたいと思います。

準備

pipでseleniumをインストールして、npmでPhantomJSを入れます。

npmは実行したいスクリプト直下のディレクトリ内で実行してください。

pip install selenium
npm install phantomjs

この作業により、node_modulesディレクトリ内にphantomjsが入ります。

スクリプト

# -*- coding:utf-8 -*-

import os
from selenium import webdriver


def login(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()
    mylist_url = "http://www.nicovideo.jp/api/deflist/list"
    driver.get(mylist_url)
    print(driver.page_source)


if __name__ == "__main__":
    login("your_id", "your_password")

ブラウザの機能をそのまま実行してくれるので、ソースからhidden属性を探したりする必要も無くとっても簡単ですね。

ただ、少し重いようなので大量の処理には不向きかもしれません。

requestsのようなモジュールとうまく使い分けができると便利です。

コメントを残す

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