【Python】Windows10でスクレイピングしたときのメモ【Selenium】

お名前.comからスクレイピングでDNSレコードを取得したかったのでその時のメモ

 

必要なもの

Python、seleniumが動作する環境

とりあえずブラウザを開く

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


# ChromeのWebDriverオブジェクトを作成
options = webdriver.ChromeOptions()

# ドライバの選択
driver = webdriver.Chrome(executable_path='/Users/ユーザー名/Desktop/Selenium/chromedriver.exe', chrome_options=options)

# 要素が表示されるまで10秒待機する設定
driver.implicitly_wait(10)

# 操作するページを開く
driver.get('https://navi.onamae.com/domain')

これでとりあえずブラウザは開けます

「chromedriver.exe」の場所はそれぞれなので都度変更する

 

driver.implicitly_wait(10)

この項目は、後ほど登場するクリック系の処理が実行できるようになるまでの最大待機時間

 time.sleep(10)

このようにしてもよいのだが

これだと10秒必ず待たないといけないのでダメ。

かといって待機時間を早くすると読み込みが追い付かずにエラーが出たりする。

操作系

driver.find_element_by_name('loginId').send_keys('xxxxxx')
driver.find_element_by_css_selector('button').click()
driver.find_element_by_xpath( "//a[@class='btn gtmclick']" ).click()

上から順に

・nameがloginIdになっている要素にxxxxxxを入力

・cssでbuttonになっている要素をクリック

・xpathで指定した要素をクリック

 

xpathを使うと大体の要素を選択できる

chromeの拡張機能「xpath helper」を使うと簡単にxpathを生成してくれる

reCAPTCHA認証の対処

reCAPTCHA認証を突破する方法もあるみたいですが、今回は頻繁に認証しなかったので
認証が出てくるタイミングで入力待ちにしてその間に手動で認証した
# ログインボタンのクリック
driver.find_element_by_css_selector('button').click()

# 認証が表示されるのでここで入力待ちにする
input()

何かを入力すると処理が再開される

認証が終わっていないのにキーを入力したときの例外処理などはきちんとしておいたほうがよさそう、、、

try-exceptで例外対応

もしも認証がただしくできていない場合の例外処理を書いておく

この場合認証できていないとプログラムが終了する

# ログインボタンのクリック
driver.find_element_by_css_selector('button').click()

# 認証が表示されるのでここで入力待ちにする
input()

try: # 認証できていれば画面クリック
    driver.find_element_by_xpath( "//a[@class='btn gtmclick']" ).click()
except: # 認証できていなければ終了
    sys.exit()

ログを残そう

しっかりログを残していると、エラーが出て終了したときに原因がわかる。

driver.find_element_by_css_selector('button').click()
logger.log(10, 'ログインをクリックしました')

logger.log(20, 'reCAPTCHA認証を行って「Enter」')
input()

try:
    driver.find_element_by_xpath( "//a[@class='btn gtmclick']" ).click()
    logger.log(10, 'ページを移行しました')
except:
    logger.log(50, '認証が正常に完了しませんでした')
    sys.exit()

 

 

 

 

コメント

タイトルとURLをコピーしました