自動ゲームラベルの作成(3)-スクリプトエラーの処理
7899 ワード
0.本段階での構想
selenium exceptionでは、複数のスクリプトで発生する可能性のある例外が定義されているので、エラーを処理するために使用しましょう.😀
1.更新中に発生する可能性のある例外の参照
1) NoSuchElementException
存在しないロール名を検索中に発生したエラー.ロールチェックページではなく別のページにジャンプするため、検索する要素が存在しないため、Exceptionが発生します.または、Web構造が変更されると、その要素の変更も発生します.
2) unexpected alert open
後で、リクエストの再リフレッシュ、ロール名の変更、またはロールの削除によってリフレッシュできない場合は、Alertウィンドウが作成されます.予期せぬAlertウィンドウが作成されたため、Exceptionが起動します.
3) AttributeError
空の値を取得し、その値でメソッドを実行しようとしたときに発生したエラー.この値は空です.または、要素をロードする前に値を取得してエラーを発生させます.
2.Selenium exceptionの表示
selenium.common.異常には多くの異常があり、それらを利用して上記の異常を処理します.
1) NoSuchElementException
前に述べたNoSuchElementExceptionです.エラーが発生した場合は、ページ構造が変更されたか、ページロードが完了したかを確認します.
waitなども利用でき、次回のリリースで検討します.
2) UnexpectedAlertPresentException
これは前述した意外なalert openです.alertウィンドウを閉じて、次の操作を続行する必要があります.
3) WebDriverException
Selenium WebDriver異常の基本異常.「除外」セクションでは、この例外を使用してwebdriver exceptionを処理できます.
AttributeErrorはPython Errorなので議論しません.
3.try~exceptionブロックの作成 import gspread
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, UnexpectedAlertPresentException, WebDriverException
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
def main():
...
for character in character_list:
if character == '' or character in worlds:
continue
base_url = 'https://maple.gg/u/'
url = base_url + character
try:
driver.get(url) # 검색 결과 페이지로 이동
except UnexpectedAlertPresentException:
print("일시적인 오류이거나 캐릭터명이 변경 혹은 삭제되었습니다.")
driver.get(url)
except WebDriverException:
print("웹 페이지 로딩 중 오류가 발생했습니다.")
continue
try:
refresh = driver.find_element(by=By.XPATH, value='//*[@id="btn-sync"]') # 갱신버튼 가져오기
except NoSuchElementException:
print("올바르지 않은 캐릭터명이거나 올바르지 않은 경로입니다.")
else:
try:
refresh.click() # 갱신버튼 클릭
except AttributeError:
print("웹 페이지 로딩이 완료되지 않았거나 일시적인 오류입니다.")
time.sleep(15) # 갱신 시간 기다림
if __name__ == '__main__':
main()
1) NoSuchElementException
存在しないロール名を検索中に発生したエラー.ロールチェックページではなく別のページにジャンプするため、検索する要素が存在しないため、Exceptionが発生します.または、Web構造が変更されると、その要素の変更も発生します.
2) unexpected alert open
後で、リクエストの再リフレッシュ、ロール名の変更、またはロールの削除によってリフレッシュできない場合は、Alertウィンドウが作成されます.予期せぬAlertウィンドウが作成されたため、Exceptionが起動します.
3) AttributeError
空の値を取得し、その値でメソッドを実行しようとしたときに発生したエラー.この値は空です.または、要素をロードする前に値を取得してエラーを発生させます.
2.Selenium exceptionの表示
selenium.common.異常には多くの異常があり、それらを利用して上記の異常を処理します.
1) NoSuchElementException
前に述べたNoSuchElementExceptionです.エラーが発生した場合は、ページ構造が変更されたか、ページロードが完了したかを確認します.
waitなども利用でき、次回のリリースで検討します.
2) UnexpectedAlertPresentException
これは前述した意外なalert openです.alertウィンドウを閉じて、次の操作を続行する必要があります.
3) WebDriverException
Selenium WebDriver異常の基本異常.「除外」セクションでは、この例外を使用してwebdriver exceptionを処理できます.
AttributeErrorはPython Errorなので議論しません.
3.try~exceptionブロックの作成 import gspread
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, UnexpectedAlertPresentException, WebDriverException
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
def main():
...
for character in character_list:
if character == '' or character in worlds:
continue
base_url = 'https://maple.gg/u/'
url = base_url + character
try:
driver.get(url) # 검색 결과 페이지로 이동
except UnexpectedAlertPresentException:
print("일시적인 오류이거나 캐릭터명이 변경 혹은 삭제되었습니다.")
driver.get(url)
except WebDriverException:
print("웹 페이지 로딩 중 오류가 발생했습니다.")
continue
try:
refresh = driver.find_element(by=By.XPATH, value='//*[@id="btn-sync"]') # 갱신버튼 가져오기
except NoSuchElementException:
print("올바르지 않은 캐릭터명이거나 올바르지 않은 경로입니다.")
else:
try:
refresh.click() # 갱신버튼 클릭
except AttributeError:
print("웹 페이지 로딩이 완료되지 않았거나 일시적인 오류입니다.")
time.sleep(15) # 갱신 시간 기다림
if __name__ == '__main__':
main()
import gspread
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, UnexpectedAlertPresentException, WebDriverException
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
def main():
...
for character in character_list:
if character == '' or character in worlds:
continue
base_url = 'https://maple.gg/u/'
url = base_url + character
try:
driver.get(url) # 검색 결과 페이지로 이동
except UnexpectedAlertPresentException:
print("일시적인 오류이거나 캐릭터명이 변경 혹은 삭제되었습니다.")
driver.get(url)
except WebDriverException:
print("웹 페이지 로딩 중 오류가 발생했습니다.")
continue
try:
refresh = driver.find_element(by=By.XPATH, value='//*[@id="btn-sync"]') # 갱신버튼 가져오기
except NoSuchElementException:
print("올바르지 않은 캐릭터명이거나 올바르지 않은 경로입니다.")
else:
try:
refresh.click() # 갱신버튼 클릭
except AttributeError:
print("웹 페이지 로딩이 완료되지 않았거나 일시적인 오류입니다.")
time.sleep(15) # 갱신 시간 기다림
if __name__ == '__main__':
main()
driver.get()
:Web Driver Exceptionが異常です.Webページのロード中に複数のエラーが発生する可能性があります.アラートがまだ存在する場合、ページのロードに問題が発生した場合は、それをUnexpectedAlertPresentExceptionと見なします.refresh = driver.find_element()
:更新ボタンの経路が正しくない場合は、NoSuchElementExceptionを使用して例外処理refresh.click()
:更新ボタンが存在する場合は、をクリックします.alertウィンドウまたはattributeErrorが発生する可能性があるため、各ウィンドウで例外処理が行われます.4.次の悩み
time.無計画にsleep()を待つよりもきれいに更新を待つ方法はありますか?🤔
5. Reference
Selenium 4.1.0 documentation
Reference
この問題について(自動ゲームラベルの作成(3)-スクリプトエラーの処理), 我々は、より多くの情報をここで見つけました
https://velog.io/@chaejm55/토이-프로젝트-자동화된-게임-명부-만들기3-스크래핑-오류-다루기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Selenium 4.1.0 documentation
Reference
この問題について(自動ゲームラベルの作成(3)-スクリプトエラーの処理), 我々は、より多くの情報をここで見つけました https://velog.io/@chaejm55/토이-프로젝트-자동화된-게임-명부-만들기3-스크래핑-오류-다루기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol