コード
先にコードの全貌を知りたい方のために、すべてのコードを記載しました。
上から順に解説していきます。
from lib2to3.pgen2 import driver
from time import sleep
from drivers import Driver
#IDとpasswordを定義
INSTAGRAM_ID = ''
INSTAGRAM_PASSWORD =''#main.pyの方で設定する
class Instagram(Driver):
def __init__(self):
super(Instagram, self).__init__()
self.page = None
#インスタグラムにログインを行う
def login(self):
try:
#インスタグラムにアクセス
self.get('https://www.instagram.com/accounts/login/')
sleep(3)
#ログインフォームを探し、入力する。
sign_box = self.find_element_by_tag_name('form')
sign_box.find_element_by_name('username').send_keys(INSTAGRAM_ID)
sign_box.find_element_by_name('password').send_keys(INSTAGRAM_PASSWORD)
#ログインボタン押下
login_btn = sign_box.find_element_by_xpath('//button[@type="submit"]')
login_btn.click()
logger.info('login succeeded')
sleep(3)
#ダイアログを閉じる
dialog_box = self.find_element_by_xpath('//div[@role="dialog"]')
btn = dialog_box.find_element_by_tag_name('button')
btn.click()
except Exception:
pass
コード解説
フィールド
INSTAGRAM_ID = ''
INSTAGRAM_PASSWORD =''
こちらは何も入力しなくて大丈夫です。
呼び出す側のmain.pyをコマンド実行する際の引数で設定を行います。
こうすることにより、引数を変えるだけで、別のアカウントで実行することができます。
from instagram import INSTAGRAM_ID,INSTAGRAM_PASSWORD
*********
#IDとpasswordをコマンドライン引数から取得する
parser = argparse.ArgumentParser()
parser.add_argument('id')
parser.add_argument('password')
#コマンドライン引数を解析する
account = parser.parse_args()
#IDとpasswordを設定する
INSTAGRAM_ID = account.id
INSTAGRAM_PASSWORD = account.password
main.pyに関してはまた、別の記事で解説したいと思います。
ログイン画面に移動
self.get('https://www.instagram.com/accounts/login/')
sleep(3)
こちらが、instagramのログイン画面のURLです。
sleep(3)にしましたが、こちらは入力フォームが読み込まれるまで、Webドライバーで待機を設定してもいいかもしれません。
完成形では修正する可能性があります。
ログインフォームにIDとPasswordを入力
sign_box = self.find_element_by_tag_name('form')
sign_box.find_element_by_name('username').send_keys(INSTAGRAM_ID)
sign_box.find_element_by_name('password').send_keys(INSTAGRAM_PASSWORD)
初めの一行で、入力フォームのブロックを指定しています。
instagramではIDの入力フォームのnameはusernameとなっているため、usernameをfind、send_keysで引数で設定したINSTAGRAM_IDを貼り付けます。
パスワードも同じです。
ログインボタン押下
#ログインボタン押下
login_btn = sign_box.find_element_by_xpath('//button[@type="submit"]')
login_btn.click()
formブロックの中をxパスでボタンを探します。
.click()でボタンを押下します。
最後に
pythonはseleniumなど、画面操作に関するライブラリが多くあり、非常に簡単に行うことができます。
私自身、pythonを触ったのがこれが初めてだったのですが、非常に便利だなという印象です。(.click()なんてjavascriptみたい)
次の記事ではinstaloaderについて記述したいと思います。
instaloaderはinstagramからGUIを使用せずに情報を取得できる非常に強力なライブラリです。
私が作成したことすたぐらむのクライアント側のコードは、seleniumとinstaloaderの2段構えで作成しております。公式サイトにすべての関数が載っており、instagramで行いたいことすべてが行えます。日本語でinstaloaderについて書かれてある記事は少ないですが、別の記事で紹介するサイトを参考にするとすべての関数は容易に使用できます。
是非ご覧ください。
また、ご指摘やご質問などございましたら、コメントよろしくお願いいたします。
参照サイト