MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. Python
  5. seleniumによるログイン処理 – Python

seleniumによるログイン処理 – Python

2019 9/15
Python
2019-07-042019-09-15
ログイン
目次

selenium × Chrome によるログイン処理

requestsなどのHTTPの送受信のみを行うインターフェイスと違いブラウザの自動操作系のインターフェイスの利点の一つにログイン処理を楽に行えるという点があります。

そもそもJavaScriptによってBot判定がなされているサイトもあり、ブラウザ利用以外でのログインが難しい場合も多いです。

selenium を使ってChromeを操作すれば、それらの認証を通過して、ログインユーザーにしか扱えないページにBotアクセスすることが可能になります。

selenium × ChromeでYahoo!にログインする

ヤフーのログインフォームを入力するサンプルです。

from selenium import webdriver
import time

driver = webdriver.Chrome() #立ち上げ
driver.get('https://login.yahoo.co.jp/config/login') #ログインページへ

login_id = 'ログインid'
login_pass = 'ログインpass'

driver.find_element_by_css_selector('#username').send_keys(login_id) #id入力
driver.find_element_by_css_selector('#btnNext').click() #submitボタンをクリック
time.sleep(1)
driver.find_element_by_css_selector('#passwd').send_keys(login_pass) #passを入力
driver.find_element_by_css_selector('#btnSubmit').click() #submitボタンをクリック
time.sleep(1)

これでヤフーにログインした状態のブラウザの状態を作り出すことが出来ます。

一行ずつ追っていけば、普通のマクロ的な動作しかしていないので、割と簡単ですね。

ログイン状態を維持したまま操作をrequestsで行う

seleniumによるログイン処理は普通にブラウザからアクセスするのと同じ操作をトレースすることで可能になりますので、非常に実装が楽になります。

ただ、情報を収集したり、変化を監視するといった用途のBotを組んでいく場合、seleniumは動作の速度や安定性に欠ける部分があります。

ブラウザの描画が必要な分、多少仕方ない部分ではありますが、ログイン処理後の動作にJavaScriptのエンジンが必要でない場合、その先をrequestsによって行うことが出来ます。

それぞれのライブラリに得意な部分のみを担当させるイメージです。

オススメの処理担当
  • ログイン処理 → selenium × Chrome
  • クロール処理→ requests × BeautifulSoup

HTTPと言うプロトコルは、一度のリクエストで完結し、前後の処理の相関を保持することが出来ません。簡単にいうと、一回ぽっきり。すぐに忘れます。つまり、HTTPはログインしたことなど、覚えていません。

では、何故ページをめくってWebサイトの中を回遊してもログイン状態が維持されているのか?というと、ログインセッションと言うのは基本的にCookieを使って管理されているからです。

Cookieと言うのはクライアント側(ブラウザ)に書き込まれる、メモ書きのようなもので、色々な用途に利用されますが、ログインの判定はその代表例です。

つまり、特定サイトにログインした状態のCookieがあり、尚且つ、そのCookieが有効期限内であれば、別のインターフェイスからそのサイトにアクセスしてもログイン状態を維持することが出来ます。

import requests

session = requests.session() #sessionインスタンスを作成

#Chromeが持っているCookieを全てsessionに引き渡す
for cookie in driver.get_cookies(): 
   session.cookies.set(cookie["name"], cookie["value"])

session.get('login後操作したいURL')

上記処理で、seleniumでログインした状態のChromeブラウザのクッキーをrequestsのsessionインスタンスに引き渡すことが可能です。

その後はログインユーザー用のページをsession.get()で取得可能になります。

サイトの構造によっては使えないパターンもありますが、多くのサイトで使えるはずです。

まとめ

Webクローリングにおいて、ログイン処理というのは避けては通れない部分です。requestsでやろうとすると、hidden属性になっているinputをpostしなければいけなかったり、何かと解析に時間がかかるパターンが多いですが、seleniumを使えばあっけないほど簡単にログイン処理を作れます。

ログイン後は動作が早くて安定性の高いrequestsで操作することも可能ですので、是非覚えておきたいテクニックです。

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド
created by Rinker
技術評論社
¥3,800 (2025/05/21 23:22:36時点 Amazon調べ-詳細)
  • Kindle
  • Amazon
  • 楽天市場
  • Yahooショッピング
Python
Chrome selenium スクレイピング
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • 正規表現処理の濁点でハマった話2024-12-12
  • 保護中: 疾風v2更新履歴2024-05-31
  • 【自営・経営者向け・税金も】クレジットカードガチ勢による最強クレカ解説2023-10-23
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
目次
目次