如何使用Python中的Selenium WebDriver按照html选择复选框
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Python中的Selenium WebDriver按照html选择复选框相关的知识,希望对你有一定的参考价值。
我有一个复选框,我需要使用Selenium选择。以下是HTML
:
<input id="diDataCheck" ng-model="$parent.DIDATA.IsSet" name="Mode" type="checkbox" class="ng-pristine ng-untouched ng-valid ng-empty" xpath="1">
我尝试使用它的id
或name
访问它,甚至使用XPath
,但它似乎没有工作。
CHECKBOX = (By.XPATH, ".//*[contains(text(), 'diDataCheck')]""") # using XPATH
CHECKBOX = (By.ID, "diDataCheck") # using id
CHECKBOX = (By.NAME, "Mode") # using name
我在上面用作:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(CHECKBOX)).click()
我也把上面的线放在try except
但我在Exception message
什么都没有。
当我将WebDriverWait()
更改为:
driver.find_element_by_id("diDataCheck").click()
我得到例外:
Message: element not visible
答案
您可以在等待条件下使用此XPath
checkElement = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//input[@name='Mode' and @type='checkbox']")));
checkElement.click();
另一答案
这是你可以这样做的一种方法:
driver.execute_script("document.getElementById('diDataCheck').click()")
但是没有'安全'的方式知道按钮是否被按下,所以请记住这一点。如果要确定是否单击了复选框,可以在input元素上实现change eventHandler。
另一答案
根据你的HTML,你复选框是一个Angular元素,所以要在它上面调用click()
你必须诱导WebDriverWait所需的元素是可点击的,你可以使用以下任一解决方案:
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-untouched.ng-valid.ng-empty#diDataCheck[name='Mode']"))).click()
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-pristine ng-untouched ng-valid ng-empty' and @id='diDataCheck'][@name='Mode']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
以上是关于如何使用Python中的Selenium WebDriver按照html选择复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Selenium firefox 驱动只截取浏览过的页面
如何用python的selenium提取页面所有资源加载的链接