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

时间:2019-04-07 12:09:02

标签: javascript python selenium selenium-webdriver webdriverwait

我正在使用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,但有时在此之前调用按钮按下,这会导致站点出现故障并需要此赶上时间。 / p>

我尝试过等待该元素可见并使用element.click()函数,该函数无效。我以为使用JavaScript来调用按钮就可以了,但这都不可行。

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

预期的结果是按下按钮,并等待直到出现“签出”按钮,然后再尝试按下签出按钮,这样站点才不会出现问题。

1 个答案:

答案 0 :(得分:0)

要在元素上调用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