【问题标题】:document.querySelector( ).click(); not working selenium $0.click(); undefineddocument.querySelector().click();硒不起作用 $0.click();不明确的
【发布时间】:2021-01-10 14:15:14
【问题描述】:

我正在尝试单击带有硒的按钮。我已经使用 $0.click(); 尝试了 Chrome 和 Firefox 控制台;并且可以工作,但是在使用选择器进行测试时它不起作用,“未定义”,document.querySelector(“#td”).click();。

我尝试使用 selenium 不起作用。

HTML:

<td id="td" onclick="if(top.body) Len('td')" class="lenDesActiv">Date</td>

我尝试了以下方法:

driver.execute_script('document.querySelector("td#tdDos.lenguetaActiva").click();')
driver.execute_script('document.querySelector("td#").click();')
driver.execute_script('document.querySelector("#td").click();')
driver.execute_script('document.querySelector("td#td").click();')
driver.execute_script('document.getElementById("td").click();')
driver.findElement(By.id("td")).click();
document.getElementById("td").addEventListener("click", function(){
    alert("hello world");
});

loginelement = driver.find_element(By.ID, 'td')
driver.execute_script("arguments[0].click();", loginelement)

【问题讨论】:

  • 您的整个表单都在 iframe 中,首先切换到它。 /html/frameset/frameset/frame[2] 使用这个 xpath。

标签: python selenium xpath css-selectors frame


【解决方案1】:

文本为 FechaWebElement 位于 &lt;frame&gt; 内,因此您必须:

  • 诱导WebDriverWait 使所需的框架可用并切换到它

  • 诱导WebDriverWait 使所需的元素可点击

  • 您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.get('https://your_website.com/')
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"frame[name='body']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td#tdDos.lenguetaDesActiva"))).click()
    
  • 使用XPATH

    driver.get('https://your_website.com/')
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@name='body']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@id='tdDos' and @class='lenguetaDesActiva']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:


参考

您可以在以下位置找到一些相关讨论:

【讨论】:

    【解决方案2】:

    您的问题首先是 iframe 切换到它。

    driver.get("https://webpage.com")
    driver.switch_to.frame(driver.find_element_by_xpath("/html/frameset/frameset/frame[2]"))
    loginelement = driver.find_element(By.ID, 'td')
    driver.execute_script("arguments[0].click();", loginelement)
    

    【讨论】:

      【解决方案3】:

      试试这个。

      首先切换到框架。

      driver.switch_to.frame("body")
      

      等待元素可点击。

      WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH, '//td[@id="td"]')))
      

      使用 JavaScriptExecutor 点击元素。

      driver.execute_script('document.querySelector("td").click()')
      

      【讨论】:

        猜你喜欢
        • 2014-11-01
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        • 2017-06-14
        • 2014-12-27
        • 1970-01-01
        相关资源
        最近更新 更多