👌
seleniumの証明書提出
内容
ダウンロードや証明書提出など、一部の処理はブラウザ処理ではないため、seleniumで操作できない
マウス操作などで設定していかないと、seleniumは待ち状態になる
これらを自動化するために
- pythonで直接windowsを操作する
- スレッド処理を使用し、seleniumとwindows操作を並列させる
今回はpyautoguiという操作ライブラリを使用
画像を認識し、位置情報を取得できるため、大変便利
PyAutoGui
概要
win32apiというwindows操作APIのラッパ
pythonからwindows操作が可能になる
公式ドキュメント
準備
pip install pyautogui
python (自身の環境を確認、↓ならAMD64bit)
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
上記から自身の環境にあったものをインストール
注意)pip経由のインストールもできるが、実験中、らしい
pip install pywin32
コード
#################################
# pki edge click #
#################################
def pki_edge(self, pattern):
result = True
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
futures = []
futures.append(executor.submit(self.__pki_edge_pyautogui, pattern))
futures.append(executor.submit(self.__pki_edge_selenium, pattern))
for future in concurrent.futures.as_completed(futures):
result &= future.result()
return result
#################################
# pki edge selenium #
#################################
def __pki_edge_selenium(self, pattern):
# edge
if self.__driver.title == "証明書エラー: ナビゲーションはブロックされました":
ok_flg, elm = self.__get_element("moreInformationDropdownSpan")
if ok_flg:
elm.click()
ok_flg, elm = self.__get_element("invalidcert_continue")
if ok_flg:
elm.click()
return ok_flg
#################################
# pki edge pyautogui #
#################################
def __pki_edge_pyautogui(self, pattern):
ok_flg = True
cmd = pattern[len("pki_"):len(pattern)]
if cmd == "ok":
ok_flg, pos = self.__get_position("img/ms-ok.png")
if ok_flg:
# move & click
pyautogui.moveTo(pos.x, pos.y, 1)
pyautogui.click()
elif cmd == "cancel":
ok_flg, pos = self.__get_position("img/ms-cancel.png")
if ok_flg:
# move & click
pyautogui.moveTo(pos.x, pos.y, 1)
pyautogui.click()
else:
ok_flg, pos = self.__get_position("img/ms-next.png")
if ok_flg:
# move & click
pyautogui.moveTo(pos.x, pos.y, 1)
pyautogui.click()
# move & click
num = int(cmd) + 1
pyautogui.moveTo(pos.x, pos.y + (60 * num), 0.2)
pyautogui.doubleClick()
ok_flg, pos = self.__get_position("img/ms-ok.png")
if ok_flg:
# move & click
pyautogui.moveTo(pos.x, pos.y, 0.2)
pyautogui.click()
return ok_flg
Discussion