[英]is there a way to get a bot to automatically restart if the site crashes
如果站點崩潰,有沒有辦法讓這個機器人自動重新啟動,如果站點沒有正確加載,是否有辦法讓機器人刷新頁面。 因為我無法在刷新時獲得 xpath 並且我不知道如果機器人沒有實現其目標如何重新啟動
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
start_time = time.time()
# my code here
path = "C:\Program Files (x86)\Common Files\Chromedriver.exe"
driver = webdriver.Chrome(path)
# open page
driver.get("https://www.usmint.gov/")
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="navigation"]/div[3]/ul/li[2]/a')) #PRODUCT S
)
finally:
# product schedule
driver.find_element_by_xpath('//*[@id="navigation"]/div[3]/ul/li[2]/a').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="navigation"]/div[3]/ul/li[2]/div/div/ul/li[3]/a')) #2020
)
finally:
# 2020 product schedule
driver.find_element_by_xpath('//*[@id="navigation"]/div[3]/ul/li[2]/div/div/ul/li[3]/a').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="4cb2318c15eb72316187ca9691"]/div/div/div[2]/div/div[1]/a')) #birth set
)
finally:
# birth set 2020
driver.find_element_by_xpath('//*[@id="4cb2318c15eb72316187ca9691"]/div/div/div[2]/div/div[1]/a').click()
'''
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="emailmodalclose"]')) #clear
)
finally:
# clear email list stupidity
driver.find_element_by_xpath('//*[@id="emailmodalclose"]').click()
'''
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div[3]/div[2]/div[2]/form/div/div[5]/button[1]')) #add to
)
finally:
# add to bag
driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/div[2]/form/div/div[5]/button[1]").click()# double qoutes?
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="mini-cart"]/div[3]/div[2]/div[3]/a')) #checkout
)
finally:
# checkout
driver.find_element_by_xpath('//*[@id="mini-cart"]/div[3]/div[2]/div[3]/a').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_login_username"]')) #login
)
finally:
# login
driver.find_element_by_xpath('//*[@id="dwfrm_login_username"]').send_keys("email")
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_login_password"]')) #Password
)
finally:
# password
driver.find_element_by_xpath('//*[@id="dwfrm_login_password"]').send_keys("password")
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="checkoutMethodLoginSubmit"]/span')) #checkout as
)
finally:
# checkout as registered user
driver.find_element_by_xpath('//*[@id="checkoutMethodLoginSubmit"]/span').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCardList"]/option[2]')) #credit card scroll
)
finally:
# credit card scroll
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCardList"]/option[2]').click() # .format?
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_month"]/option[2]')) #cc exp m
)
finally:
# cc exp month
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_month"]/option[2]').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_year"]/option[11]')) #cc exp y
)
finally:
# cc exp year
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_year"]/option[11]').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_cvn"]')) #cvv
)
finally:
# cvv
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_cvn"]').send_keys("999")
time.sleep(2)
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="checkoutContinuePaymentDelegator"]')) #continue to final
)
finally:
# continue to final review
driver.find_element_by_xpath('//*[@id="checkoutContinuePaymentDelegator"]').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="formAgreementLabel"]/span')) #terms of use
)
finally:
# terms of use button
driver.find_element_by_xpath('//*[@id="formAgreementLabel"]/span').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="submitOrderButton"]')) #Place order
)
finally:
# place order
driver.find_element_by_xpath('//*[@id="submitOrderButton"]').click()
print ("time elapsed: {:.2f}s".format(time.time() - start_time))
driver.quit()
#if __name__ == '__main__':
# order(keys)
如果您在代碼中看到任何可以修復的內容,我們將不勝感激
有沒有辦法讓這個機器人在網站崩潰時自動重啟,如果網站沒有正確加載,有沒有辦法讓機器人刷新頁面。 因為我無法在刷新時獲取xpath,而且我不知道如何在無法完成目標的情況下使bot重新啟動
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
start_time = time.time()
# my code here
path = "C:\Program Files (x86)\Common Files\Chromedriver.exe"
driver = webdriver.Chrome(path)
# open page
driver.get("https://www.usmint.gov/")
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="navigation"]/div[3]/ul/li[2]/a')) #PRODUCT S
)
finally:
# product schedule
driver.find_element_by_xpath('//*[@id="navigation"]/div[3]/ul/li[2]/a').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="navigation"]/div[3]/ul/li[2]/div/div/ul/li[3]/a')) #2020
)
finally:
# 2020 product schedule
driver.find_element_by_xpath('//*[@id="navigation"]/div[3]/ul/li[2]/div/div/ul/li[3]/a').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="4cb2318c15eb72316187ca9691"]/div/div/div[2]/div/div[1]/a')) #birth set
)
finally:
# birth set 2020
driver.find_element_by_xpath('//*[@id="4cb2318c15eb72316187ca9691"]/div/div/div[2]/div/div[1]/a').click()
'''
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="emailmodalclose"]')) #clear
)
finally:
# clear email list stupidity
driver.find_element_by_xpath('//*[@id="emailmodalclose"]').click()
'''
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div[3]/div[2]/div[2]/form/div/div[5]/button[1]')) #add to
)
finally:
# add to bag
driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/div[2]/form/div/div[5]/button[1]").click()# double qoutes?
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="mini-cart"]/div[3]/div[2]/div[3]/a')) #checkout
)
finally:
# checkout
driver.find_element_by_xpath('//*[@id="mini-cart"]/div[3]/div[2]/div[3]/a').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_login_username"]')) #login
)
finally:
# login
driver.find_element_by_xpath('//*[@id="dwfrm_login_username"]').send_keys("email")
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_login_password"]')) #Password
)
finally:
# password
driver.find_element_by_xpath('//*[@id="dwfrm_login_password"]').send_keys("password")
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="checkoutMethodLoginSubmit"]/span')) #checkout as
)
finally:
# checkout as registered user
driver.find_element_by_xpath('//*[@id="checkoutMethodLoginSubmit"]/span').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCardList"]/option[2]')) #credit card scroll
)
finally:
# credit card scroll
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCardList"]/option[2]').click() # .format?
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_month"]/option[2]')) #cc exp m
)
finally:
# cc exp month
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_month"]/option[2]').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_year"]/option[11]')) #cc exp y
)
finally:
# cc exp year
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_year"]/option[11]').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_cvn"]')) #cvv
)
finally:
# cvv
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_cvn"]').send_keys("999")
time.sleep(2)
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="checkoutContinuePaymentDelegator"]')) #continue to final
)
finally:
# continue to final review
driver.find_element_by_xpath('//*[@id="checkoutContinuePaymentDelegator"]').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="formAgreementLabel"]/span')) #terms of use
)
finally:
# terms of use button
driver.find_element_by_xpath('//*[@id="formAgreementLabel"]/span').click()
try:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="submitOrderButton"]')) #Place order
)
finally:
# place order
driver.find_element_by_xpath('//*[@id="submitOrderButton"]').click()
print ("time elapsed: {:.2f}s".format(time.time() - start_time))
driver.quit()
#if __name__ == '__main__':
# order(keys)
如果您在代碼中看到任何可以修復的內容,我們將不勝感激
正如評論中所要求的,這是最簡單但不是理想的方式。 由於您的try except
子句不包含except
子句,因此它們在您的代碼中沒有任何作用,除了它只是抑制您的所有TimeoutException
,您實際上需要它們,因為您需要知道它遇到什么錯誤。 為了改進這個解決方案,您可以考慮拆分try except
子句並僅重新執行那些等待元素行而不是整個腳本。
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
start_time = time.time()
# my code here
path = "C:\Program Files (x86)\Common Files\Chromedriver.exe"
driver = webdriver.Chrome(path)
while True:
try:
# open page
driver.get("https://www.usmint.gov/")
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="navigation"]/div[3]/ul/li[2]/a')) #PRODUCT S
)
# product schedule
driver.find_element_by_xpath('//*[@id="navigation"]/div[3]/ul/li[2]/a').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="navigation"]/div[3]/ul/li[2]/div/div/ul/li[3]/a')) #2020
)
# 2020 product schedule
driver.find_element_by_xpath('//*[@id="navigation"]/div[3]/ul/li[2]/div/div/ul/li[3]/a').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="4cb2318c15eb72316187ca9691"]/div/div/div[2]/div/div[1]/a')) #birth set
)
# birth set 2020
driver.find_element_by_xpath('//*[@id="4cb2318c15eb72316187ca9691"]/div/div/div[2]/div/div[1]/a').click()
'''
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="emailmodalclose"]')) #clear
)
# clear email list stupidity
driver.find_element_by_xpath('//*[@id="emailmodalclose"]').click()
'''
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div[3]/div[2]/div[2]/form/div/div[5]/button[1]')) #add to
)
# add to bag
driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/div[2]/form/div/div[5]/button[1]").click()# double qoutes?
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="mini-cart"]/div[3]/div[2]/div[3]/a')) #checkout
)
# checkout
driver.find_element_by_xpath('//*[@id="mini-cart"]/div[3]/div[2]/div[3]/a').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_login_username"]')) #login
)
# login
driver.find_element_by_xpath('//*[@id="dwfrm_login_username"]').send_keys("email")
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_login_password"]')) #Password
)
# password
driver.find_element_by_xpath('//*[@id="dwfrm_login_password"]').send_keys("password")
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="checkoutMethodLoginSubmit"]/span')) #checkout as
)
# checkout as registered user
driver.find_element_by_xpath('//*[@id="checkoutMethodLoginSubmit"]/span').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCardList"]/option[2]')) #credit card scroll
)
# credit card scroll
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCardList"]/option[2]').click() # .format?
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_month"]/option[2]')) #cc exp m
)
# cc exp month
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_month"]/option[2]').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_year"]/option[11]')) #cc exp y
)
# cc exp year
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_year"]/option[11]').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="dwfrm_billing_paymentMethods_creditCard_cvn"]')) #cvv
)
# cvv
driver.find_element_by_xpath('//*[@id="dwfrm_billing_paymentMethods_creditCard_cvn"]').send_keys("999")
time.sleep(2)
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="checkoutContinuePaymentDelegator"]')) #continue to final
)
# continue to final review
driver.find_element_by_xpath('//*[@id="checkoutContinuePaymentDelegator"]').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="formAgreementLabel"]/span')) #terms of use
)
# terms of use button
driver.find_element_by_xpath('//*[@id="formAgreementLabel"]/span').click()
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="submitOrderButton"]')) #Place order
)
# place order
driver.find_element_by_xpath('//*[@id="submitOrderButton"]').click()
print ("time elapsed: {:.2f}s".format(time.time() - start_time))
driver.quit()
break
except Exception as err:
print(f"Error: {str(err)}, trying again")
pass
#if __name__ == '__main__':
# order(keys)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.