【ツール配布】安全確認回避、ポップアップ回避のseleniumライブラリ
コード
目的
やりたいこと
- seleniumをシナリオで動かしたい
- seleniumはコード書く必要あるが、毎回コードを書きたくない
- 他部署の非エンジニアでも使えるようにしたい
- ブラウザでコード出力できるが、毎回手作業したくない
- システム毎に改修する部分は一ヶ所にまとめたい
- デバッグ中にオレオレ証明書というだけで止めたくない
- クライアント証明書提出で止めたくない
後回しでいいこと
- 処理速度
- 夜間に走らせるため
- 結果確認の自動化
- 証拠残す必要もあるのでスクショの確認でOK
- 今後の課題
実装
オレオレ証明書回避
コード
def avoid_security_check(self):
ok_flg = True
if self.__driver.title:
# ie
if self.__driver.title == "このサイトは安全ではありません":
ok_flg = self.click("moreInfoContainer")
ok_flg &= self.click("overridelink")
time.sleep(0.5)
# edge
elif self.__driver.title == "証明書エラー: ナビゲーションはブロックされました":
ok_flg = self.click("moreInformationDropdownSpan")
ok_flg &= self.click("invalidcert_continue")
time.sleep(0.5)
return ok_flg
説明
- ページタイトルを確認して、忠告していればOK
- 遷移に時間かかるため、sleep必須
クライアント証明書提出
コード
def cert(self, cmd):
self.__pki_flg = False
ok_flg = True
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
futures = []
futures.append(executor.submit(self.post_cert_chrome, cmd))
futures.append(executor.submit(self.submit, cmd))
for future in concurrent.futures.as_completed(futures):
ok_flg &= future.result()
return ok_flg
def submit(self):
ok_flg = self.click("submit")
return ok_flg
def post_cert_chrome(self, cmd):
# cmd check is practiced
if cmd == "ok":
ok_flg = self.move_click("img/chrome/ok.png")
elif cmd == "cancel":
ok_flg = self.move_click("img/chrome/cancel.png")
elif cmd.isdecimal():
diff = 80 + (int(cmd) * 40)
ok_flg = self.move_click("img/chrome/next.png", 0, diff)
ok_flg &= self.move_click("img/chrome/ok.png")
return ok_flg
def move_click(self, img_path, x=0, y=0, seconds=0.2):
# search from image
pos, ok_flg = self.search_from_image(img_path)
if ok_flg:
# move mouse
pyautogui.moveTo(pos.x + x, pos.y + y, seconds)
# click
pyautogui.click()
return ok_flg
def search_from_image(self, img_path):
# check image
if not os.path.isfile(img_path):
self.__log.printLog(LOG_LEVEL.EEROR, "failed to setting")
return None, False
i = 30
while i > 0:
i -= 1
# get position
pos = pyautogui.locateCenterOnScreen(img_path)
if pos:
break
time.sleep(0.2)
if not pos:
return None, False
return pos, True
説明
- ポップアップ中はseleniumが止まるため、並列処理
- selenium
- ポップアップ出現のトリガを行う
- pyautogui
- ポップアップ画像を検索し、押下
- ポップアップ出現までラグのある場合も考慮し、指定時間内はループ
まとめ
- メリット
- サンプルとしての有用性はある
- 安全確認の回避
- ポップアップの回避
- 今後の課題
- 結果確認が目視のため、自動化したい
- ポップアップ対応のため、不都合がある
- 画像検索するため非表示実行できない
- ツールでマウス操作する場面があるため、テスト中にPC操作ができない
- seleniumはコード書く必要あるが、毎回コードを書きたくない
- 他部署の非エンジニアでも使えるようにしたい
- ブラウザでコード出力できるが、毎回手作業したくない
- 夜間に走らせるため
- 証拠残す必要もあるのでスクショの確認でOK
- 今後の課題
オレオレ証明書回避
コード
def avoid_security_check(self):
ok_flg = True
if self.__driver.title:
# ie
if self.__driver.title == "このサイトは安全ではありません":
ok_flg = self.click("moreInfoContainer")
ok_flg &= self.click("overridelink")
time.sleep(0.5)
# edge
elif self.__driver.title == "証明書エラー: ナビゲーションはブロックされました":
ok_flg = self.click("moreInformationDropdownSpan")
ok_flg &= self.click("invalidcert_continue")
time.sleep(0.5)
return ok_flg
説明
- ページタイトルを確認して、忠告していればOK
- 遷移に時間かかるため、sleep必須
クライアント証明書提出
コード
def cert(self, cmd):
self.__pki_flg = False
ok_flg = True
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
futures = []
futures.append(executor.submit(self.post_cert_chrome, cmd))
futures.append(executor.submit(self.submit, cmd))
for future in concurrent.futures.as_completed(futures):
ok_flg &= future.result()
return ok_flg
def submit(self):
ok_flg = self.click("submit")
return ok_flg
def post_cert_chrome(self, cmd):
# cmd check is practiced
if cmd == "ok":
ok_flg = self.move_click("img/chrome/ok.png")
elif cmd == "cancel":
ok_flg = self.move_click("img/chrome/cancel.png")
elif cmd.isdecimal():
diff = 80 + (int(cmd) * 40)
ok_flg = self.move_click("img/chrome/next.png", 0, diff)
ok_flg &= self.move_click("img/chrome/ok.png")
return ok_flg
def move_click(self, img_path, x=0, y=0, seconds=0.2):
# search from image
pos, ok_flg = self.search_from_image(img_path)
if ok_flg:
# move mouse
pyautogui.moveTo(pos.x + x, pos.y + y, seconds)
# click
pyautogui.click()
return ok_flg
def search_from_image(self, img_path):
# check image
if not os.path.isfile(img_path):
self.__log.printLog(LOG_LEVEL.EEROR, "failed to setting")
return None, False
i = 30
while i > 0:
i -= 1
# get position
pos = pyautogui.locateCenterOnScreen(img_path)
if pos:
break
time.sleep(0.2)
if not pos:
return None, False
return pos, True
説明
- ポップアップ中はseleniumが止まるため、並列処理
- selenium
- ポップアップ出現のトリガを行う
- pyautogui
- ポップアップ画像を検索し、押下
- ポップアップ出現までラグのある場合も考慮し、指定時間内はループ
- ポップアップ画像を検索し、押下
- selenium
まとめ
- メリット
- サンプルとしての有用性はある
- 安全確認の回避
- ポップアップの回避
- 今後の課題
- 結果確認が目視のため、自動化したい
- ポップアップ対応のため、不都合がある
- 画像検索するため非表示実行できない
- ツールでマウス操作する場面があるため、テスト中にPC操作ができない
- サンプルとしての有用性はある
- 安全確認の回避
- ポップアップの回避
- 結果確認が目視のため、自動化したい
- ポップアップ対応のため、不都合がある
- 画像検索するため非表示実行できない
- ツールでマウス操作する場面があるため、テスト中にPC操作ができない
Author And Source
この問題について(【ツール配布】安全確認回避、ポップアップ回避のseleniumライブラリ), 我々は、より多くの情報をここで見つけました https://qiita.com/world_of_bear/items/7f07fb96ad01044e7b00著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .