【问题标题】:Selenium(PYTHON) click element until no longer clickableSelenium(PYTHON) 点击元素直到不再可点击
【发布时间】:2021-05-17 22:43:45
【问题描述】:

所以我制作了一个包含元素的整个 XPATH 的程序,它应该一直点击该元素直到它不再可点击,但它似乎无法正常工作,这里有什么问题?

while True:

    try:
        driver.find_element_by_xpath("//*[@id='trades-container']/div/div[2]/div/div/div/div[1]/div[2]/div/div[2]/div[2]/ul/li[3]/a").click()
        print("item has been clicked")
    except TimeoutException:
        print("done clicking")
time.sleep(1)

【问题讨论】:

    标签: python selenium click webautomation


    【解决方案1】:

    捕获错误,因为元素 不再可点击 像这样,似乎不是最佳做法。 相反,您可以使用element.isDisplayed()element.isEnabled() 这两个函数来检查元素是否在文档中显示和可点击

    如果有任何疑问,请查看文档:

    然而,如果你想使用错误异常,你可以关注EAFP principle并捕捉click() 引发的异常:

    from selenium.common.exceptions import WebDriverException
    
    try:
        element.click()
    except WebDriverException:
        print "Element is not clickable"
    

    【讨论】:

    • 好的,但是如果我想循环点击直到它不再可点击怎么办?
    • 使用这些函数只需使用一个while循环:while element.isDisplayed() and element.isEnabled(): #do stuff @ExoticLegend714
    【解决方案2】:

    我不知道你为什么在不使用任何等待时除了超时,

    由于使用类值禁用元素,请使用上述方法

    classvalue=driver.find_element_by_xpath("//*[@id='trades-container']/div/div[2]/div/div/div/div[1]/div[2]/div/div[2]/div[2]/ul/li[3]/a").get_attribute("class")
     
     while "disable" not in classvalue:       
            driver.find_element_by_xpath("//*[@id='trades-container']/div/div[2]/div/div/div/div[1]/div[2]/div/div[2]/div[2]/ul/li[3]/a").click()
            print("item has been clicked")
            time.sleep(1)
    
     print("done clicking")
    

    【讨论】:

    • 我认为格式和概念至少比你写的更好,但是元素不可点击,当我运行它时,它继续打印“项目已被点击”,即使元素不可点击,一次打印“完成点击”有什么问题?
    • 当它不可点击并且您尝试从脚本中点击它时会引发任何异常?
    • 如果它是一个禁用的元素,它应该抛出不可交互的元素
    • 是的,当它不可点击时,元素的类变为禁用
    • seelnium 不会检测类,它会检测 html 属性禁用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2017-04-16
    • 2015-06-13
    相关资源
    最近更新 更多