在 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 newname$='new'
: name attribute ends with newvalue='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 获取内部具有动态部分的选择器?
相关文章