Seleniumで困ったことのまとめ
最近、seleniumを入力作業の自動化をする仕組みを作りそれにあたって困ったことなどこの記事でまとめていこうかなと思います。何をimportするとかは書いたらpycharmが勝手に教えてくれるので省略
reCAPTCHAや二段階認証の回避
chromeにてユーザープロファイルに対象のサイトのログイン情報を記憶させ、seleniumでユーザープロファイル指定、ドライバー初期化にて回避する。
# main.py
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--user-data-dir=C:\Users\Yoshi\AppData\Local\Google\Chrome\User Data")
options.add_argument("--profile-directory=Profile 7")
driverPath = "C:\Program Files (x86)\WebDriver\chromedriver_win32\chromedriver_87.exe"
driver = webdriver.Chrome(executable_path=driverPath, options=options)
Send.keyが遅い......
execute_scriptを使ってテキストボックスに値を入力します。
# webドライバー初期化は省きます
targetId = "targetId"
inputVal = "inputVal"
# 改行を含めて文字列を入力したいとき↓
# inputVal = inputVal.replace('\n', '\\n')
driver.execute_script(f'document.getElementById("{targetId}").value="{inputVal}";')
要素の存在チェックを行う
# webドライバー初期化は省きます
if len(driver.find_elements(By.ID, "element")) > 0:
print("あるよ。")
Conform Alert box のOKボタンを押す
# webドライバー初期化は省きます
# クリックするのは何でもよいComform Alertとの表示のトリガーとなるものをクリック
driver.find_element_by_xpath("xpath").click()
Alert(driver).accept() # OK
Alert(driver).dismiss() # キャンセル
type fileに画像を送る
# webドライバー初期化は省きます
productImgFilePath = r"C:\work\RakumaAutoApp\1.jpg"
driver.find_element_by_xpath("xpath").send_keys(productImgFilePath)
アクセス毎にIPアドレスを変えたい
以下を参考↓
https://takazawa.github.io/hobby/selenium_python_tor/
xpathの確認方法
chromeだけ、たぶんほかのブラウザも大体おんなじ感じだと思う
・F12で開発者用画面を開く
・何でもよいから選択
対象要素右クリ、Copyを見れば見つかる。
まとめ
今回の入力作業自動化のプログラム作成で初めてPythonを触り、いい勉強になった。Seleniumも何かと何もせずに勝手にブラウザ動かしてなんかしてくれるのできもちいい。