Seleneを使ってログインをした後、Selene/Seleniumでは処理しづらく、urllibやrequestsなどの別ライブラリを併用したくなるようなケースに遭遇する事があります。
その場合、SeleneのCookie情報を取得し、別ライブラリに渡すとことで解決するのですが、方法が特殊なのかあまり例が見当たらないので調べて見ました。
今回はSeleneを使ってログイン後、Cookieをrequestsにセットする方法を試しています。
import os
from selene.browsers import BrowserName
from selene.api import *
import requests
TARGET_URL = {ログイン対象のURL}
LOGIN_ID = os.getenv("LOGIN_ID")
PASSWORD = os.getenv("PASSWORD")
def main():
try:
# 利用ブラウザを設定
config.browser_name = BrowserName.CHROME
# 対象ページを開き、IDとPASSWORDをセットしてログイン(仮)
browser.open_url(TARGET_URL)
s('input[id="login_id"').set(LOGIN_ID)
s('input[id="password"').set(PASSWORD)
s('input[id="submit"').click()
# Cookieを取得
cookies = browser.driver().get_cookies()
# 取得したCookieをrequestsに渡す形に変換
d = []
for cookie in cookies:
d[cookie["name"] ] = cookie["value"]
# user-agent設定(必要なら)
headers = {
'User-Agent': 'Mozilla/5.0 xxxx'
}
# Cookieを引数にrequestを呼び出し
request_url = {クッキーが必要なURL}
r = requests.get(request_url, headers=headers, cookies=d)
print(r.text)
except:
raise
if __name__ == '__main__':
main()
Seleneでログイン後、HTMLそのものを取得したい場合、HTMLをPDF等に変換したい場合など、用途は限定的だと思いますが、知っておくと便利。