gpt4 book ai didi

python - Selenium Chrome Webdriver 进程在本地工作但不在 Heroku 上工作

转载 作者:行者123 更新时间:2023-12-04 12:23:08 25 4
gpt4 key购买 nike

所以我有以下在本地正常工作的 Selenium Chrome Webdriver 进程。基本上,当下面的代码运行时,通过 Best Buy 进行购买,并且从我的 Twilio 电话号码向我发送一条 SMS 消息,指示购买是否成功。全部大写的变量已经定义。我也没有包括进口。同样,以下代码在本地运行时使购买成功。这意味着我从我的 Twilio 电话号码收到的 SMS 消息包含“成功!”每次在本地运行以下代码时:

client = Client(ACCOUNT_SID, AUTH_TOKEN)
def runBestBuyBotLocal():
driver = webdriver.Chrome()
driver.get("https://www.bestbuy.com/site/spongebob-squarepants-mini-plush-styles-may-vary/6404213.p?skuId=6404213")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html/body[@class='size-l']/div[@class='pl-page-content']//div[@class='container-v2']/div[@class='row v-m-bottom-g']/div[2]//div[@class='col-xs-12']/div[6]/div[@class='None']/div/div/div/button[@type='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='c-portal']/div[@role='dialog']/div[1]/div[@role='dialog']/div[@role='document']//a[@role='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='cartApp']/div[@class='page-spinner page-spinner--out']/div[@class='large-view size-l']//div[@class='fluid-large-view']//section[@class='fluid-large-view__sidebar']//button[@type='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-e']")))
element.send_keys(EMAIL)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-p1']")))
element.send_keys(PASSWORD)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='cia-app-container']/div[@class='cia-actual-full-page-wrapper lv']/section/main[@class='cia-wrapper container']//form/div[3]/button")))
element.send_keys(Keys.RETURN)
driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']"))))
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']")))
element.send_keys(CVV)
driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='checkoutApp']/div[@class='page-spinner page-spinner--out']/div[1]/div[1]//div[@class='checkout__container checkout__container-fast-track']/div[@class='checkout__col checkout__col--primary']//div[@class='button--place-order-fast-track']/button"))))
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='checkoutApp']/div[@class='page-spinner page-spinner--out']/div[1]/div[1]//div[@class='checkout__container checkout__container-fast-track']/div[@class='checkout__col checkout__col--primary']//div[@class='button--place-order-fast-track']/button")))
element.send_keys(Keys.RETURN)

try:
runBestBuyBotLocal()
message = client.messages \
.create(
body='Success!',
from_=TWILIONUMBER,
to=MYNUMBER
)
except:
message = client.messages \
.create(
body='Fail! ' + traceback.format_exc(),
from_=TWILIONUMBER,
to=MYNUMBER
)
以下代码是基本相同的过程,但稍微调整以在 Heroku 远程 dyno 上运行。它是我的 Heroku 网络应用程序的一部分。在 Heroku 远程 dyno 上运行时,以下代码无法成功购买。相反,它在行 element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='c-portal']/div[@role='dialog']/div[1]/div[@role='dialog']/div[@role='document']//a[@role='button']"))) 上抛出超时错误
这真的很奇怪,因为我在 runBestBuyBotLocal 中有相同的行, 当 runBestBuyBotLocal在本地执行gets,该行没有抛出超时异常,购买成功。
因此,由于抛出了超时异常,每次我在 Heroku 远程测功机上运行以下代码时,我都会从我的 Twilio 电话号码收到一条包含“失败!”的 SMS 消息:
def runBestBuyBotRemote():
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--no-sandbox")
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), chrome_options=chrome_options)
driver.get("https://www.bestbuy.com/site/spongebob-squarepants-mini-plush-styles-may-vary/6404213.p?skuId=6404213")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html/body[@class='size-l']/div[@class='pl-page-content']//div[@class='container-v2']/div[@class='row v-m-bottom-g']/div[2]//div[@class='col-xs-12']/div[6]/div[@class='None']/div/div/div/button[@type='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='c-portal']/div[@role='dialog']/div[1]/div[@role='dialog']/div[@role='document']//a[@role='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='cartApp']/div[@class='page-spinner page-spinner--out']/div[@class='large-view size-l']//div[@class='fluid-large-view']//section[@class='fluid-large-view__sidebar']//button[@type='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-e']")))
element.send_keys(EMAIL)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-p1']")))
element.send_keys(PASSWORD)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='cia-app-container']/div[@class='cia-actual-full-page-wrapper lv']/section/main[@class='cia-wrapper container']//form/div[3]/button")))
element.send_keys(Keys.RETURN)
driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']"))))
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']")))
element.send_keys(CVV)
driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='checkoutApp']/div[@class='page-spinner page-spinner--out']/div[1]/div[1]//div[@class='checkout__container checkout__container-fast-track']/div[@class='checkout__col checkout__col--primary']//div[@class='button--place-order-fast-track']/button"))))
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='checkoutApp']/div[@class='page-spinner page-spinner--out']/div[1]/div[1]//div[@class='checkout__container checkout__container-fast-track']/div[@class='checkout__col checkout__col--primary']//div[@class='button--place-order-fast-track']/button")))
element.send_keys(Keys.RETURN)

client = Client(ACCOUNT_SID, AUTH_TOKEN)
try:
runBestBuyBotRemote()
message = client.messages \
.create(
body='Success!',
from_=TWILIONUMBER,
to=MYNUMBER
)
except:
message = client.messages \
.create(
body='Fail!' + traceback.format_exc(),
from_=TWILIONUMBER,
to=MYNUMBER
)
所以,问题是:有没有人知道为什么 runBestBuyBotLocal在本地运行时不会抛出超时异常以及为什么 runBestBuyBotRemote在我的 Heroku 远程测功机上运行时是否抛出超时异常?换句话说,为什么我会得到“成功!”当进程在本地运行并显示“失败!”时的 SMS 消息当它在我的 Heroku 远程测功机上运行时出现消息?
我很困惑为什么该过程在本地运行时成功而在 Heroku 远程 dyno 上运行时失败。 runBestBuyBoyLocal之间的唯一区别和 runBestBuyBotRemote函数是 webdriver 的实例化方式。所以一个失败和一个成功的原因可能是由于这种差异,但我不确定。
如果我需要清理任何东西,请告诉我!

最佳答案

import traceback

try:
WebDriverWait(driver, 2).until(EC.element_to_be_clickable(
(By.XPATH, '//b[@id = "country_england"]/preceding-sibling::input'))).click()
except:
traceback.print_exc()
使用 traceback 打印完整的异常跟踪。
enter image description here

关于python - Selenium Chrome Webdriver 进程在本地工作但不在 Heroku 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65879929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com