Python Web ペ-ジ自動操作

Pear::Auth 認証 自動ログインファイル作成

ここまでで、Pear::Auth 認証に自動ログインするファイル作成準備ができました。
引き続き、
Pear::Auth 認証 サンプル表示に自動ログインするファイル
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
    os.getenv(key, default=None)
    とすると環境変数 key が存在すればその値を返し、存在しなければ default を返します。
    key、default、および返り値は文字列です。
    default=None は省略することができます。 なお、os.getenv は os.environ.get の alias なので、 使い方に違いはありません。

  4. 読出環境変数読出

    読出した環境変数値を設定、表示します。
    PEAR_LOGIN = os.getenv('PEAR_LOGIN')
    PEAR_PASSWORD = os.getenv('PEAR_PASSWORD')
    print(PEAR_LOGIN)
    print(PEAR_PASSWORD)

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

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

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

    認証組込ドキュメントページを開きます。
    ログイン後のペ-ジが表示される URL は
    https://63pear.devel.jp/auth/Auth-30.php
    ですので、

    browser.open('https://63pear.devel.jp/auth/Auth-30.php')

    とします。
    次にログインページが開いていることを確認します。
    assert '/Auth-30.php' in browser.get_url()
    assert 文は与えられた式が True の場合は何もせず、False の場合に 例外 AssertionError を発生させます。
    今回の場合正常ならば、URL に /Auth-30.php はあるはずなので
    True になり何も起こりません。

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

    ログインフォーム(form は1つしかない)を選択します。
    フォームの選択は
    browser.select_form(name="inputForm")
    名前がない場合は、表示順を指定して
    browser.select_form(nr=0)
    のように取得します。
    今回は、form は1つしかないので単純に
    browser.select_form()
    としました。
    次に、name="username" という入力ボックスを埋めます。
    browser['username'] = PEAR_LOGIN
    name="password" という入力ボックスを埋めます。
    browser['password'] = PEAR_PASSWORD

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

    途中経過報告をします。
    logging.info('Signing in...')
    submit ボタンを選択してフォームを送信します。
    browser.submit_selected()
    最後に、ログイン後の現在のページの HTML ソースを表示します。
    get_current_page() メソッドを使用すると現在のページの HTML ソースを取得します。

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

    なお Beautiful Soup オブジェクトの prettify()メソッドを使用すると 1行に1タグのきれいにフォーマットされた形で HTML を表示します。

  9. if ブロック作成

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

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

以上をまとめると以下のようになります。


  #!/usr/bin/python3
  #coding: utf-8
  print("Content-type: text/html; charset=UTF-8\n\n")

  import os
  import logging
  import mechanicalsoup
  from dotenv import load_dotenv
  load_dotenv()
  # 認証の情報は環境変数から取得する。
  # ここでは、getenv の代わりに environ を使用
  PEAR_LOGIN = os.environ['PEAR_LOGIN']
  PEAR_PASSWORD = os.environ['PEAR_PASSWORD']
  print(PEAR_LOGIN)
  print(PEAR_PASSWORD)

  def main():
    browser = mechanicalsoup.StatefulBrowser()
    # 認証組込ドキュメントページを開く。
    logging.info('Navigating...')
    browser.open('https://63pear.devel.jp/auth/Auth-30.php')
    # ログインページが開いていることを確認する。
    assert '/Auth-30.php' in browser.get_url()
    # ログインフォーム(form は1つしかない)を埋める。
    browser.select_form()
    browser['username'] = PEAR_LOGIN
    # name="username" という入力ボックスを埋める。
    browser['password'] = PEAR_PASSWORD
    # name="password" という入力ボックスを埋める。
    # フォームを送信する。
    logging.info('Signing in...')
    browser.submit_selected()
    print(browser.get_current_page().prettify())
    # 現在のページのHTMLソースを表示する。
  if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO)
    # INFOレベル以上のログを出力する。
    main()

本内容を TeraPad 等で作成したら、ファイル名を適当に
sc_63pear.py
として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の 共有フォルダ c:\vb_public_html にして、 ブラウザでアクセスできるようにします。
なお、
c:\vb_public_html
はゲスト OS Ubuntu のなかの
/home/yamada/public_html
とリンクしていて共有フォルダの関係にあります。
詳細は ユ-ザ-ごとの公開ディレクトリを用意する を読んでみてください。

ここまでで、Pear::Auth 認証 自動ログインファイルを作成する事ができました。
引き続き、本ファイルの動作確認をしていきます。


  • sc_63pear.py ファイル動作確認 に進む
  • 自動操作の実現 に戻る
  • 環境変数読出ファイル作成 に戻る
  • Web ペ-ジ自動操作概要 に戻る
  • 70VPS に戻る