Selenium Python:查找href属性包含特定关键词的元素
我正在处理的页面在这个链接上。
这是该页面相关的部分:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>...</head>
<body>
...
<div id="searchResults">
<div class="box-related">...</div>
<a href='downloadDataServlet?category=true&type=epar' onclick=""><img src="/ema/images/icon_download_spread.gif" />Download results to spreadsheet</a>
<div class="table-holder">
<table class="table-epar eparResults" border="1" cellpadding="0" cellspacing="0" summary="Search results for EPARs ordered alphabetically">
<caption>EPAR Search results</caption>
<thead> ... </thead>
<tbody>
<tr>
<th scope="row" class="key-detail name word-wrap">
<a href="index.jsp?curl=pages/medicines/human/medicines/000471/human_med_000619.jsp&mid=WC0b01ac058001d124">Abilify</a>
</th>
...
</tr>
<tr>...</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
这是我想选择的元素的XPath位置:
//*[@id="searchResults"]/div[2]/table/tbody/tr[1]/th/a
但是搜索页面上可能会有很多结果,所以我想点击那个链接,它的URL里包含我正在搜索的产品编号(在这个例子中是000471
)。我想选择包含这个字符串的<a>
元素,它的href
属性里有这个编号。
这是我尝试过的:
inp = driver.find_element_by_xpath("//*[@id='searchResults']/div[2]/table/tbody/tr[1]/th/a[contains(@href,'"+str3+"')]")
inp.click()
其中str3
在这个例子中是000471
。但是我一直收到NoSuchElementException
的错误。
任何帮助都非常感谢!
1 个回答
0
这个问题可能是因为在重建表格时,有些元素被插入到了源代码查看器或检查器中。通常情况下,tbody
标签会被插入到代码里,但实际上在真实的源代码中并不存在这个标签。
如果你能找到一个独特的路径来选择你想要的数据,就可以简化你的XPath,不用那么多步骤。这样就可以了:
//*[@id='searchResults']//a[contains(@href,'000471')]
如果其他步骤仍然必要,你可以试着不使用这个tbody
。
更新 我还注意到你的搜索页面声明了一个命名空间:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
...
自动注册默认命名空间是依赖于具体实现的。XPath要求所有选择器都要带上命名空间。如果你的selenium实现没有做到这一点,你需要注册一个命名空间/前缀映射,并在命名空间中给所有元素加上前缀(例如://h:table/h:tr/h:td
),或者忽略这个命名空间,使用通配符并在条件中比较本地名称。
如果命名空间让你无法选择节点,你可以用这个表达式来忽略它:
//*[@id='searchResults']//*[local-name() = 'a'][contains(@href,'000471')]