硒,根据“ onclick”值选择

时间:2019-08-08 17:37:08

标签: python selenium xpath css-selectors webdriverwait

使用Selenium,我试图在网页上找到以下复选框。

<input type="checkbox" value="1" onclick="             document.getElementById('lastCheminClicked').value='123';             createInputsBinaireCell(25,'colonne5',1,0789,1,1,0,this.checked, this);">

与众不同的部分是“ onclick”中的“ 123”值,这就是硒所要寻找的。

有什么方法可以在页面上找到它吗?我尝试了xpath,但没有成功。

3 个答案:

答案 0 :(得分:0)

您可以尝试查找所有输入标签,然后依次遍历onclick属性进行遍历。例如:

from selenium.webdriver.common.by import By

input_tags = driver.find_elements(By.TAG_NAME, 'input')
found_tag = None
for input_tag in input_tags:
    onclick_attribute = input_tag.get_attribute('onclick')
    if ".value='123'" in onclick_attribute:
        found_tag = input_tag
        break

您可能需要在get_attribute调用周围进行异常处理。

答案 1 :(得分:0)

正如您提到的,部分值 123 onclick事件中是不同的,因此要查找元素,可以使用以下Locator Strategies中的任意一个:

  • 使用CSS_SELECTOR

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='checkbox'][onclick*='123']")))
    
  • 使用XPATH

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@type='checkbox' and contains(@onclick,'123')]")))
    
  • 注意:您必须添加以下导入:

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

答案 2 :(得分:0)

XPath selectors允许使用contains()函数,该函数可用于DOM元素的属性或文本值的部分匹配。

相关的选择器如下所示:

//input[contains(@onlclick, '123')]

演示:

enter image description here

更多信息: