python - 如何在 webdriver 中使用 onclick 事件作为选择器?

标签 python selenium selenium-webdriver xpath webdriver

这是元素:

<label title="Place Order" style="cursor: pointer" onclick="AjaxPageLoad(fno, 'FNOOrder');">Place Order<div></div></label>

我正在尝试单击此按钮,但需要使用 @onclick 作为主要区别符。我读了其他类似的问题,但似乎无法让它发挥作用:

driver.find_element_by_xpath("//a[contains(@onclick,'fno')]").click()

driver.find_element_by_xpath("//a[contains(@onclick,'FNOOrder')]").click()

我得到的错误:

ElementNotInteractableException: Message: Element <a id="lnkFNO" class="active" href="javascript:void(0)"> could not be scrolled into view

但是该元素是可见的,因此我认为 xpath 一定是错误的。

最佳答案

根据您共享的 HTML,使用 onclick 事件单击所需的元素,您必须引发 WebDriverWait 并且可以使用解决方案如下:

  • xpath 使用 onclick:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"]"))).click()
    
  • xpath 使用 onclicktitle:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@title='Place Order'][@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"]"))).click()
    
  • xpath 使用 onclicktitleinnerHTML:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@title='Place Order'][@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"][contains(.,'Place Order')]"))).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 - 如何在 webdriver 中使用 onclick 事件作为选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233901/

相关文章:

python,将列表的内容写入文本文件

Python:如何在 Linux 的特定目录中找到上一小时创建的新文件夹/目录

C# xUnit 测试监听器

python - 如何对 SciPy 曲线拟合施加约束?

python - 在 plumbum 上使用 python 运行 sudo 命令时出现问题

java - 单击按钮直到 Selenium 中出现警报

java - Webdriver,检测DOM变化并等待

java - .switchTo().frame( <'frameId' >);不使用 HtmlUnit 驱动程序

java - 想要在 Selenium 中创建一个计时器并执行一些操作,直到达到定义的时间段

Python 3 + Selenium : Clicked the element but nothing happen