Python 有没有办法让机器人在网站崩溃时自动重启

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

如果站点崩溃,是否有办法让此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.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子句,它在遇到错误时不会执行任何操作,包括您希望的“重新启动”或重新执行,这将非常好。。。你能给出你能给出的代码吗?如果是真的:试试:{把所有的东西放在这里,然后断开}除了:{打印错误}。