在 Python 中使用 ChromeDriver (Selenium) 通过 CSS 选择器查找元素

问题描述

我正在将 Selenium 的 ChromeDriver 与 Python 一起使用,并试图在我的页面上找到一个具有以下 HTML 的按钮:

I'm using ChromeDriver of Selenium with Python and I'm trying to find a button on my page that has the following HTML:

<input id="j_id0:SiteTemplate:j_id255:new" type="submit" name="j_id0:SiteTemplate:j_id255:new" value="New" class="kbutton-white">

我知道唯一不变的是 id 和 name 以new"结尾,我正在尝试使用以下代码来识别并单击该元素:

The only thing I know being constant is the id and name ending with "new" and I'm trying to use the following code to identify and click that element:

test_runner.driver.find_element_by_css_selector('[id*=new]').click()

但是,当我运行代码时出现此错误:

However, I get this error when I run the code:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id*=new]"}

我的错误是什么?

更新:此元素位于 iframe 中,我必须先切换到 iframe,然后才能尝试找到该元素.答案请看评论.

Update: This element was inside an iframe and I had to switch to the iframe before trying to find the element. Please see comments for the answer.


解决方案

根据您共享的 HTML,在所需元素上调用 click() 您可以使用以下 css_selector:

As per the HTML you have shared to invoke click() on the desired element you can use the following css_selector :

driver.find_element_by_css_selector("input.kbutton-white[id$='new'][name$='new'][value='New']").click()

说明:

  • .kbutton-white : class 属性.
  • id$='new' : id 属性以 new
  • 结尾
  • name$='new' : name 属性以 new
  • 结尾
  • value='New' :value 属性.
  • .kbutton-white : The class attribute.
  • id$='new' : id attribute ends with new
  • name$='new' : name attribute ends with new
  • value='New' : The value attribute.

但似乎元素是动态的,因此您可能需要如下诱导 WebDriverWait :

But it seems the element is dynamic so you may need to induce WebDriverWait as follows :

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.kbutton-white[id$='new'][name$='new'][value='New']"))).click()


参考文献

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


References

You can find a couple of relevant detailed discussions in:

  • JavaSelenium webdriver 表达式通过 ccs 查找以
  • 开头和结尾的动态元素
  • 如何在通过 Selenium 和 Python 实现自动化的同时使用 xpath/css 选择器在 drupal 8 网站中单击动态链接
  • 如何使用 Selenium 和 Python 获取内部具有动态部分的选择器?

相关文章