Python 有没有办法让机器人在网站崩溃时自动重启
如果站点崩溃,是否有办法让此bot自动重新启动,如果站点加载不正确,是否有办法让bot刷新页面。因为我无法在刷新时获得xpath,并且我不知道如果bot没有完成其目标,如何重新启动它Python 有没有办法让机器人在网站崩溃时自动重启,python,selenium,bots,Python,Selenium,Bots,如果站点崩溃,是否有办法让此bot自动重新启动,如果站点加载不正确,是否有办法让bot刷新页面。因为我无法在刷新时获得xpath,并且我不知道如果bot没有完成其目标,如何重新启动它 from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.w
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方面遇到问题,您可以尝试用Javascript替换您正在做的事情。Selenium附带内置JavaScript支持,这可能会对您有所帮助。如果您在使用XPath时遇到问题,可以尝试用JavaScript替换您正在做的事情。Selenium附带内置JavaScript支持,这可能会对您有所帮助。如评论中所要求的,这是最简单但不是理想的方法。由于您的
try-except
子句不包含except
子句,因此它们在代码中没有任何作用,只是抑制了所有的TimeoutException
,因为您需要知道它遇到了什么错误,所以您实际上需要它们。为了改进这个解决方案,可以考虑拆分<代码>尝试,除了子句,而只执行那些等待元素行,而不是整个脚本。
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)
正如评论中所要求的,这是最简单但不是理想的方法。由于您的
try-except
子句不包含except
子句,因此它们在代码中没有任何作用,只是抑制了所有的TimeoutException
,因为您需要知道它遇到了什么错误,所以您实际上需要它们。为了改进这个解决方案,可以考虑拆分<代码>尝试,除了子句,而只执行那些等待元素行,而不是整个脚本。
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)
如果“重新启动bot”意味着再次运行脚本,只需在代码周围添加一个
try except
,并在代码完成后将其打断,但我认为这不是您真正的问题,因为您没有在代码中正确使用try except
。如果不添加except子句,它在遇到错误时不会执行任何操作,包括您希望的“重新启动”或重新执行,这将非常好。。。如果“重新启动bot”意味着再次运行脚本,只需在代码周围添加一个try-except
,加上一个“while-true:”,并在代码完成后将其打断,但我认为这不是你真正的问题,由于未正确使用,请尝试在代码中使用except
。如果不添加except子句,它在遇到错误时不会执行任何操作,包括您希望的“重新启动”或重新执行,这将非常好。。。你能给出你能给出的代码吗?如果是真的:试试:{把所有的东西放在这里,然后断开}除了:{打印错误}。