我正在尝试使用生成的ID定位元素,其中ID的某些部分是已知的;例如:
id="page_x002e_x0023_default-create-firstname"
其中最后3个单词(_default-create-firstname)已知但前面的任何内容都可能发生变化。 这可能吗?
答案 0 :(得分:47)
您可以申请ends-with CSS selector:
By.cssSelector("[id$=default-create-firstname]")
<强>更新强>
自答案发布以来,有一段时间过去了。这里有一些来自链接的mozilla开发者页面和下面评论的更新:
新使用By.css而不是By.cssSelector
By.css("[id$=default-create-firstname]")
另见
的四种可能性/* Internal links, beginning with "#" */
a[href^="#"] {
background-color: gold;
}
/* Links with "example" anywhere in the URL */
a[href*="example"] {
background-color: silver;
}
/* Links with "insensitive" anywhere in the URL,
regardless of capitalization */
a[href*="insensitive" i] {
color: cyan;
}
/* Links that end in ".org" */
a[href$=".org"] {
color: red;
}
答案 1 :(得分:22)
如果您想沿着xpath路线走,那么您可以使用contains()
,如下所示:
//*[contains(@id,'_default-create-firstname')]
这将在整个页面中搜索包含文本&#34; _default-create-firstname&#34;的ID。它可以很容易地变得更具体
答案 2 :(得分:17)
您可以在Java-Selenium中试用:您可以使用ends-with()
或contains()
。我认为两者都应该有用。
driver.findElement(By.xpath("//*[ends-with(@id,'_default-create-firstname')]"));
driver.findElement(By.xpath("//*[contains(@id, '_default-create-firstname')]"));
答案 3 :(得分:6)
这适用于selenium vba
.FindElementsByXPath( "//*[contains(@class, 'unique-string')]" )
答案 4 :(得分:0)
工作一个
driver.find_element_by_xpath("//*[contains(@id, 'jobs-search-box-keyword-id')]")
不工作的人,都遇到相同的错误, TypeError:“ str”对象不可调用
1. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]")).text
2. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]").text).text
3. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]")).get_attribute("innerHTML")
4. driver.find_element(By.XPATH("//*[contains(@id, 'jobs-search-box-keyword-id')]").get_attribute("innerHTML")).get_attribute("innerHTML")
我使用python 3.7.6,硒3.141.0
答案 5 :(得分:-1)
我使用:a[id*='example']
当我的 ID 类似于 example_12