假设我有一个像这样的html结构:
<html><head></head>
<body>
<table>
<tr>
<td>
<table>
<tr>
<td>Left</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td>Center</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td>Right</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
我想构造CSS选择器来访问三个子表,这三个子表只能通过第一行中表数据项的内容来区分。
我该怎么做?
答案 0 :(得分:1)
我认为css选择器中没有这样的方法来验证内部文本。
您可以使用xpath或jQuery路径实现此目的。
xpath:
"//td[contains(text(),'Left')]" or "//td[text()='Right']"
jQuery路径
jQuery("td:contains('Centre')")
使用以下逻辑,您可以在WebDriver自动化中执行jQuery路径。
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element=(WebElement)js.executeScript(locator);
答案 1 :(得分:1)
元素上的.text方法返回元素的文本。
tables = page.find_elements_by_xpath('.//table')
contents = "Left Center Right".split()
results = []
for table in tables:
if table.find_element_by_xpath('.//td').text in contents: # returns only the first element
results.append(table)
您可以通过将“page”设置为第一个“table”元素,然后对其进行搜索来缩小搜索范围。有各种方法来改善这样的性能。注意,如果存在大量无关表,则此方法将相当慢。每个网页都会有关于如何选择代表信息的怪癖,请确保您解决这些问题以提高效率。
您还可以使用列表推导来返回结果。
results = [t for t in tables if t.find_element_by_xpath('.//td').text in contents]