使用Python中的ChromeDriver(Selenium)通过CSS选择器查找元素 [英] Finding elements by CSS selector with ChromeDriver (Selenium) in Python

查看:125
本文介绍了使用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和名称以"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:

这篇关于使用Python中的ChromeDriver(Selenium)通过CSS选择器查找元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆