Python Web ペ-ジ自動操作

Cookpad 自動ログインファイル作成

ここまでで、Cookpad 「最近見たレシピ」自動ログインファイルを作成する準備ができました。
引き続き、本ファイルを作成していきます。
sc_63pear.py とよく似たファイル構成になります。

  1. お決まりの作法

    Pyton がインスト-ルされている場所を示めします。
    #!/usr/bin/python3
    Pyton3 のインスト-ル場所がわからない場合は
    $ which python3
    で知ることができます。
    ファイルで使用する文字コ-ドを設定します。
    #coding: utf-8
    HTTP ヘッダーを出力
    print("Content-type: text/html; charset=UTF-8\n\n")
    これで Python から出力された文字は Web で見ることができるようになります。

  2. ライブラリを取り込み

    取り込む必要があるライブラリは4つです。
    mechanicalsoup の動作のために
    import logging
    import mechanicalsoup
    そして環境変数読込みのために
    import os
    from dotenv import load_dotenv
    dotenv のなかにある load_dotenv ライブラリ
    を読み込み
    load_dotenv()
    で実行しておきます。

  3. 環境変数値読出

    Python OS モジュールを使用し
    import os
    読出した環境変数値を設定します。
    COOKPAD_LOGIN = os.environ['COOKPAD_LOGIN']
    COOKPAD_PASSWORD = os.environ['COOKPAD_PASSWORD']

  4. def main()ブロック作成Ⅰ

    StatefulBrowser オブジェクトを作成します。
    browser = mechanicalsoup.StatefulBrowser()
    次に、途中経過報告をします。
    想定された通りのことが起こったことの確認です。
    プログラムの通常の操作中に発生したイベントの報告 (例えば、状態の監視や障害の分析)をします。
    なくてもよいです。
    例えば
    logging.info('I told you so')
    とすると、うまく通過すると
    INFO:root:I told you so
    のように表示されます。
    ここでは、
    logging.info('Navigating...')
    としました。
    うまく通過したときは
    INFO:root:Navigating...
    と表示されます。

  5. def main()ブロック作成Ⅱ

    最終的に表示したいペ-ジの URL は
    https://cookpad.com//recipe/history
    ですので、

    browser.open('https://cookpad.com/recipe/history')

    とします。

  6. def main()ブロック作成Ⅲ

    ログインできていないので
    ログインページ
    https://cookpad.com/login
    にリダイレクトされます。
    リダイレクトされていることを確認します。
    assert '/login' in browser.get_url()

  7. def main()ブロック作成Ⅳ

    ログインフォーム
    (class="login_form" の要素内にある form)
    を埋めます。
    form の 20行前ぐらいに
    <div class='login_form'>
    があります。
    browser.select_form('.login_form form')
    name="login" という入力ボックスを埋めます。
    browser['login'] = COOKPAD_LOGIN
    name="password" という入力ボックスを埋めます。
    browser['password'] = COOKPAD_PASSWORD
    途中経過報告をします。
    logging.info('Signing in...')
    submit ボタンを選択してフォームを送信します。
    browser.submit_selected()

  8. ログインに失敗

    ログインに失敗する場合は

    print(browser.get_current_page().prettify())

    で現在のページの HTML ソースを表示します。

  9. def main()ブロック作成Ⅴ

    最近見たレシピのページが表示されていることを確認します。
    assert '最近見たレシピ' in browser.get_current_page().title.string
    最近見たレシピの名前とURLを表示します。
    id="main" のなかの <a class="recipe-title
    のなかにレシピ名とリンク先があります。
    for 文を使って順次これらを表示します。

      
      for a in browser.get_current_page().select('#main a.recipe-title'):
        print(a.text)
        print(browser.absolute_url(a.get('href')))
    

    href属性の値は相対URLなので、絶対URLに変換しています。

  10. if ブロック作成

    ファイルが直接実行された場合は、
    INFO レベル以上のログを出力するよう設定し、
    main() が実行されるようにします。

    
      if __name__ == '__main__':
        logging.basicConfig(level=logging.INFO)
        main()
    

ここまでで、Cookpad 自動ログインファイルをほぼ作成する事ができました。
引き続き、本ファイルをまとめていきます。


  • Cookpad 自動ログインファイル作成まとめ に進む
  • Cookpad 最近見たレシピ に自動ログインする に戻る
  • sc_63pear.py ファイル動作確認 に戻る
  • Pear::Auth 認証 自動ログインファイル作成 に戻る
  • 自動操作の実現 に戻る
  • 環境変数読出ファイル作成 に戻る
  • Web ペ-ジ自動操作概要 に戻る
  • 70VPS に戻る