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



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

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

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

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

但是,当我运行代码时,我收到此错误:

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,然后才能尝试找到该元素。请参阅评论以获取答案。

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

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

解释 :

  • .kbutton-white属性。
  • id$='new'id属性以new结尾
  • name$='new'name属性以new结尾
  • value='New'属性。

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

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

参考资料

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

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

最新更新