スポンサーリンク

Selenium(Python)でYahooJapanに自動ログインしてみる

https://www.yahoo.co.jp/

ちょっと、自動ログインしてみたくなったので、試してみます。

スポンサードリンク

開発環境

Windows10 Pro 21H1
Chrome
ChromeDriver 93.0.4577.15
Anaconda3 2021.05(64-bit) 

selenium-3.141.0

SeleniumでChromeDriverを利用するための環境構築については「Windows10にAnacondaをインストールしてchromedriverを利用する(2021年9月版)」をご覧ください。

今回のseleniumのポイント

  • driver.find_element_by_link_text(")
  • driver.find_element_by_name(")
  • driver.find_element_by_xpath('//button[normalize-space()=""]’)

Anaconda NavigatorからJupyterLabを起動

スタートボタン > Anaconda3(64-bit) > Anaconda navigator (anaconda3) をクリックして、Anaconda Navigatorを起動します。

なんか黒い画面が出ては消えるのを繰り返した後、以下の画面が出てくるので、 JupyterLab のところの「Launch」をクリックして、JupyterLabを起動します。

ブラウザが自動的に開いて、以下のような画面が出てきます。

この左側上の方にある、「フォルダ作成ボタン」

をクリックして、新規フォルダを作成します。今回は、「python」という名前に変更しました。

なお、上記のJupyterLabの左側の Documents/ フォルダですが、Windowsの 「ドキュメント」フォルダと同じ場所になります。

新規Notebook(Python3)を作成

画面左側の、先ほど作成した python フォルダをダブルクリックした後、画面左側の Notebook の Python3 をクリックして、新規Notebookを作成します。

Untitled.ipynb ファイルが作成されるので、画面左側で、Untitled.ipynb を右クリック > Rename をクリックして、名前を変更します。今回は、210920_001.ipynb に変更しておきます。

以下のようになりました。

なお、Chromedriverのインストールについては、 「Windows10にAnacondaをインストールしてchromedriverを利用する(2021年9月版)」をご覧ください。

YahooのIDを作成する

YahooIDを持っていない場合は、以下の「ID新規取得」から作成してください。

IDとパスワードを、メモ帳などにメモしておきます。

Chromeで、ログインのリンクのname属性を調べる

https://www.yahoo.co.jp/ をChromeで開き、適当な場所で右クリック > 検証 をクリックします。

以下のような画面になるので、右側の黒い画面左上の図の矢印のボタンをクリックした後に、左側の画面の「ログイン」をクリックします。

さらに、下図の「・・・」をクリックして、「Edit as HTML」をクリックします。

残念ながら、ログインの「name属性」はありませんでした。よって、他の方法でリンクをクリックするようにしようと思います。

結局、ログインのところのhtmlは、以下のようになっていました。

<a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="https://login.yahoo.co.jp/config/login?.src=www&.done=https://www.yahoo.co.jp/" data-ylk="rsec:personal;slk:login;pos:0" data-rapid_p="1">
  <span class="fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR">
    ログイン
  </span>
</a>

name属性がなかったので「ログイン」という名前で行く方針とする

driver.find_element_by_link_text('ログイン')

で行く方針としました。

JupyterLabに以下を入力して、Shift+Enter で実行し、ログイン画面までいってみます。

from selenium import webdriver
import time

driver = webdriver.Chrome()  #WEBブラウザの起動

driver.get('https://www.yahoo.co.jp/') 
# driver.set_window_size(1920,1080)

time.sleep(3)

button = driver.find_element_by_link_text('ログイン')
button.click()
time.sleep(3)

Chromeが自動的に開いて、以下のようにログインページまで行けました。

ログインIDはname属性を見つけてdriver.find_element_by_name() で指定する

トップページど同様に、右クリック > 検証 で、「ID/携帯電話番号/メールアドレス」のところのhtmlを見てみると、

<input type="text" name="login" id="username" value="" placeholder="ID/携帯電話番号/メールアドレス" spellcheck="false" data-rapid_p="1" class="">

のようになっています。「name属性」が login となっているので、jupyterlabのところで、以下のように入力します。

{それぞれのYahooID}のところは、それぞれの方の個人のYahooIDを入れてください。

mail = driver.find_element_by_name('login') 
mail.clear()
mail.send_keys("{それぞれのYahooID}")

また、「次へ」ボタンのhtmlは上のように、 「name属性」が btnNext となっていますので、以下のようにJupyterLabに入力して、Shift+Enterで実行してみます。

button = driver.find_element_by_name('btnNext') 
button.click()

すると、以下のような画面で止まってしまうので、また、右クリック > 検証 ・・・ で、パスワード入力画面のname属性を探すと、 passwd となっているのがわかります。

「name属性」が passwd となっているので、jupyterlabのところで、以下のように入力します。

{それぞれパスワード}のところは、それぞれの方の個人のYahooIDのパスワードを入力してください。

password = driver.find_element_by_name('passwd') 
password.clear()
password.send_keys("{それぞれパスワード}")

「ログイン」ボタンはfind_element_by_xpath()で指定する

上の方と同様に、右クリック > 検証 > ・・・ で、ログイン ボタンのhtmlを調べると、

上記のようになっているので、以下のようにして、ログインボタンをクリックするようにします。

button = driver.find_element_by_xpath('//button[normalize-space()="ログイン"]')
button.click()

上記をまとめて、Shift + Enter でJupyterLabのコードを実行してみます。 {それぞれのYahooID}と{それぞれパスワード}のところは、それぞれの方の個人のYahooIDと、そのパスワードを入力してください。

from selenium import webdriver
import time

driver = webdriver.Chrome()  #WEBブラウザの起動

driver.get('https://www.yahoo.co.jp/') 
# driver.set_window_size(1920,1080)

time.sleep(3)

button = driver.find_element_by_link_text('ログイン')
button.click()
time.sleep(3)

mail = driver.find_element_by_name('login') 
mail.clear()
mail.send_keys("{それぞれのYahooID}")
button = driver.find_element_by_name('btnNext') 
button.click()
time.sleep(3)

password = driver.find_element_by_name('passwd') 
password.clear()
password.send_keys("{それぞれパスワード}")
button = driver.find_element_by_xpath('//button[normalize-space()="ログイン"]')
button.click()

無事、ログインできたようです。

参考リンク

https://qiita.com/kinpira/items/383b0fbee6bf229ea03d

WEBスクレイピングのお勧めの本

2021年時点で、以下の2つの本がお勧めです。

とりあえず試してみたい場合は、上の本がお勧めです。

しっかりやりたい場合は、以下の本がお勧めです。

スポンサーリンク