Python Selenium:按下按钮的网页加载时间不一致?



我正在使用Selenium创建一个网站购物者来测试我的python技能。我已经设法让大部分工作,除了页面加载时间的一些不一致,我无法修复,但我想我知道为什么会发生这种情况。

当我在商店加载商品页面时,我使用以下代码:

try:
cartbttn = driver.find_element_by_name('commit')
if cartbttn.is_displayed():
driver.execute_script("document.getElementsByName('commit')[0].click()")
print("Added to cart")
except(StaleElementReferenceException):
return(115)

代码通常运行良好,脚本平均在 2.5 秒内完成其运行时。 问题是偶尔按"添加购物车"按钮或"结帐"按钮会滞后页面,并导致页面"暂停"几秒钟,就好像它正在处理一样,然后操作完成。我知道这不是他们的延迟,因为站点不忙,当我手动按下按钮时,永远不会有问题。

我相信应该发生的是,当按钮完全"可见"且可单击时,按钮按下 javascript 会执行,但偶尔会在此之前调用按钮按下并导致站点出现故障并需要此追赶时间。

我尝试等待元素可见并使用 element.click() 函数,该函数没有任何效果。我以为使用 JavaScript 调用按钮按下会起作用,但这也没有。

我还添加了手动睡眠,这很有帮助。睡眠的唯一问题是它们必须足够大以应对最坏的情况,这意味着您将失去网站运行速度更快的速度优势。

预期的结果是按下按钮并等到"结帐"按钮出现,然后再尝试按下结帐按钮,这样网站就不会出现问题。

由于您希望在元素上调用click()而不是使用is_displayed()等待元素可见,您需要诱导WebDriverWait以使所需的元素可单击,您可以使用以下解决方案:

try:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.NAME, "commit"))).click()
print("Added to cart")
except(TimeoutException):
return("Error while adding to cart")

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

最新更新