【问题标题】:Selenium, select based on "onclick" valueSelenium,根据“onclick”值选择
【发布时间】:2019-08-10 19:05:31
【问题描述】:

使用 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”值,这是 selenium 应该寻找的。​​p>

有什么方法可以在页面上找到它?我试过 xpath 没有成功。

【问题讨论】:

  • 为什么不使用带有contains 的xpath,这应该可以解决问题,我在测试网站上的chrome 中尝试过它,它找到了正确的元素。你的 xpath 出了什么问题?$x("//input[contains(@onclick, \"value='123'\")]")

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

正如您提到的,部分值 123onclick 事件中是不同的,因此要定位元素,您可以使用以下任一 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】:

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

    相关的选择器类似于:

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

    演示:

    更多信息:

    【讨论】:

      【解决方案3】:

      您可以尝试查找所有输入标签,然后遍历每个标签以查看 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 调用进行异常处理。

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多