python - Selenium和Python:单击带有“data-disable-with”属性的按钮时出现问题

[编辑:在下面添加了Chrome开发人员视图的屏幕截图...]

我试图单击此对象:

<input type="submit" name="commit" value="Load Report" class="button" data-disable-with="Load Report">


在用户界面中,该按钮是可单击的,直到被单击以启动报告为止。然后禁用它,直到加载报告。

但是当我用代码打电话时:

driver.find_element_by_name("commit").click()


它抛出一个异常:

ElementNotVisibleException: element not interactable
  (Session info: chrome=71.0.3578.98)
  (Driver info: chromedriver=2.45.615355 (d5698f682d8b2742017df6c81e0bd8e6a3063189),platform=Mac OS X 10.14.0 x86_64)


因此,我很确定我找到了正确的按钮(除非还有另一个名为“ commit”的按钮),但是由于某种原因它是不可单击的。它前面没有可辨认的对象,但是CSS或...中可能隐藏着某些东西?我什么都不知道。有什么提示吗?

my puzzle

最佳答案

所需的元素是动态元素,因此要在该元素上调用click(),需要诱导WebDriverWait使其可单击,并且可以使用以下任一解决方案:


使用CSS_SELECTOR

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.button[name='commit'][value='Load Report']"))).click()

使用 XPATH

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='button' and @name='commit'][@value='Load Report']"))).click()

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

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