※スクレイプはサイトによっては禁止されている場合があるので自己責任でお願いします
Seleniumを用いてInstagramへログインする方法をメモ
ログインができれば、フォロワー情報などをAPIを介さずに取得することもできそう今回はPythonで実施した
必要なライブラリをインストール
seleniumとwebdriverのみで解決できそうだが、設定ファイルをyamlで書く癖があるのでその辺をインストールなお、環境は3.7.13で実施
pip install selenium
pip install webdriver-manager
pip install PyYAML
なおseleniumはv.4.3.0で実施。以前と仕様が変わるので注意
参考:
設定ファイルを編集
yamlファイルを以下のように作成
#conf.yaml
id: <instagramのアカウント名>
pw: <instagramのパスワード名>
実装
基本的にはxpathをChromeのデバッグモードで見つけていく
ログインについては、スマホ操作を想定しるためiPhone Xで最適化を行なった。
instagramはPCとスマホでUIが異なるのとスマホユーザーをターゲットにしていることが多いので、スマホで最適化をするのが良さそう。
instagramのログイン画面がやや特殊でSeleniumのsend_keysだけだとうまくいかなかったので、ActionChainsを用いてひとまとまりで実行した。
#USERNAME
driver.find_element('xpath','//*[@id="loginForm"]/div[1]/div[3]/div/label/input').click()
time.sleep(3)
action = ActionChains(driver)
action.send_keys(conf_dic['id'])
action.perform()
最終的なアウトプットは以下のコード
import yaml
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
with open("conf.yaml") as fd:
conf_dic = yaml.safe_load(fd)
options = Options()
chrome_options = webdriver.ChromeOptions()
is_headless = False
options.add_argument('--start-fullscreen')
##iphone Xでエミュレート
mobile_emulation = { "deviceName": "iPhone X" }
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options, chrome_options=chrome_options)
#ログイン操作
driver.get('https://www.instagram.com/')
time.sleep(3)
#ログイン
driver.find_element('xpath','//*[@id="react-root"]/section/main/article/div/div/div/div[3]/button[1]').click()
time.sleep(3)
#USERNAME
driver.find_element('xpath','//*[@id="loginForm"]/div[1]/div[3]/div/label/input').click()
time.sleep(3)
action = ActionChains(driver)
action.send_keys(conf_dic['id'])
action.perform()
#PASSWORD
driver.find_element('xpath','//*[@id="loginForm"]/div[1]/div[4]/div/label/input').click()
time.sleep(3)
driver.find_element('xpath','//*[@id="loginForm"]/div[1]/div[4]/div/label/input').send_keys(conf_dic['pw'])
#送信
driver.find_element('xpath','//*[@id="loginForm"]/div[1]/div[6]/button/div').click()
time.sleep(3)
※スクレイプはサイトによっては禁止されている場合があるので自己責任でお願いします
コメント