Pythonでブラウザ自動操作
どうもヨスケです。
今日も楽しくPythonプログラミングです。
以前の記事で、Webスクレイピング(Yahoo!ニュースの自動取得)プログラミングができるようになりました。どんどん、Webページ上でできる操作を増やしていくべく、Webブラウザ操作についても勉強中です。
今回は、少し慣れてきたSeleniumによるブラウザ操作を活用して、会員ページへのログインとマイページの情報を取ることを目的にプログラムしてみます。
① 会員ページ(例:Amazon)へログイン
② 商品の購入履歴から領収書の情報を取得する
pythonでGoogle Chromeを自動操作
長い記事をグダグダ書くのはニーズに合っていないと思いますので、さっそく作ったプログラムを紹介しようと思います。
ブラウザ処理の要素ごとに紹介しますので、みなさんの用途に応じて、組み合わせて使ってください。
ログインページURLとID/パスワードの指定
ログインページのURLとID/パスワードの指定です。また今回の処理で使用するライブラリのインポートも併せて。今回もSelenium, webdriverを使用します。
ログインしたいサイトのログインページを書きましょう。
from selenium import webdriver
import time
# AmazonのログインページとID,パスワードの指定
login_url = 'https://www.amazon.co.jp/ap/signin?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.co.jp%2Fref%3Dnav_signin&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=jpflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&'
user_id, password = ('******ID******', '*****PASSWORD******')
ログイン処理
ログインの処理です。今回の例のAmazonのログインは以下の順に遷移します。
① ID(メールアドレス)を入力
② フォーム送信
③ パスワード入力
④ フォーム送信
# ログインの処理
def try_login(driver):
# ログインページを開く
driver.get(login_url)
# ユーザー名とパスワードを書き込む
usr = driver.find_element_by_name('email')
usr.send_keys(user_id)
#フォーム送信
usr.submit()
pwd = driver.find_element_by_name('password')
pwd.send_keys(password)
#フォーム送信
pwd.submit()
リンクのテキストを探してクリック
HTMLソースの中で、ブラウザ上でクリックしたいリンクがどこにあるかをリンクが埋め込まれたテキストを探して、クリックします。本日のプログラムの肝です◎
Amazonのマイページですが、右上あたりに購入履歴に飛べるリンクがあります。
これら、クリックしたいリンクを検索しクリックする操作を記述します。
# labelを指定して検索し、リンクをクリックする
def link_click(driver, label):
a = driver.find_element_by_partial_link_text(label)
a.click()
メソッド(関数)としては非常に短いですが、htmlを読み解き、検索すべき「label」をみつけるところに苦労しました。
Progateで、HTMLの講座を受けていると、とっつきやすいです。
購入履歴ページ⇒領収書の表示
購入履歴ページ内で、領収書のリンクまでクリックしていきます。
途中、「領収書等」をクリックしたときに、注文書と領収書のリンクがポップしてきてクリックする必要があるのですが、ちょっとはまりかけました。
driver.find_element_by_partial_link_text('検索ラベル')
をうまく使って、一意のリンクをクリックできるように工夫する必要があります。
実際のAmazonの遷移画面
右上の注文履歴をクリック
「領収書等」をクリック
「領収書/購入明細書」をクリック
領収書のページ
今回のソース
# メイン処理
# Chromeを起動
driver = webdriver.Chrome()
# Amazonアカウントにログイン
try_login(driver)
time.sleep(1)
# 「注文履歴」をクリック
link_click(driver, '注文履歴')
time.sleep(2)
# 「領収書等」をクリック
link_click(driver, '領収書等')
time.sleep(2)
# 「領収書/購入明細書」をクリック
link_click(driver, '購入明細書')
time.sleep(2)
# 領収書をスクリーンショットして保存
driver.get_screenshot_as_file('receipt.png')
time.sleep(30)
効率的ではないコーディングに見えますが。。。
シンプルなメソッドの使いまわしでもやりたいことができているので良しとします◎
まとめ:ブラウザ自動操作成功!
今回はAmazonの注文履歴から領収書の情報を取得数プログラムを作りました。
なんとかブラウザを自動操作できるようになりました。
領収書はスクリーンショットで保存するようにしましたが、今後、PDFファイルとして保存する方法を調査してみようと思います。
また、1年間の領収書を一気にダウンロードができるようになると、確定申告の際にも活用できることがあるやも!進捗があれば報告します!
プログラミングの勉強に大事なこと
作りたい成果物をイメージして勉強することが非常に大事です。単に文法の勉強をしても、使うシーンがわからないメソッドの勉強をしても、身につかないと思います。
ヨスケは、作りたいプログラムをはっきりイメージして勉強しているので、うまくモチベーションを保って習得できているのではと思います。
「〇〇をプログラムにさせて楽したい」「△△の作業が面倒くさい」「■■を自動化したい」といったところにプログラム学習のモチベーションがあると思いますので、明確にやりたい処理を意識して勉強することをお勧めします。
プログラムエンジニアを目指すわけではないですが、プログラムによる自動化はだれでも身につけて損するものではなく得しかないので、今後もプログラミングで自動化関連のスキルを身につけていこうと思います。
以上、参考になればうれしいです。
今回のプログラムの作成に関して、領収書にもありましたPython自動処理の書籍が非常に参考になりました。
道具を知ったら、あとは使ってみる!
地道にやって、気付けばすごいところまで。
Python学習歴:30分×30日×3か月 = 約45時間