我的目标是基本上让Selenium点击"禁用"多次在多个行和单元格中隐藏在表中的链接。
我正在从Excel电子表格中读取以获取" P #####"的值。 (它总是第二个)循环。这些都是部分文本。 "随机词"在P #####之后,我不知道。所以我需要能够通过部分文本找到该元素,我认为我已经在自己的代码中完成了该文本,但是我无法验证该部分是否正常工作。
大约有1000行,我不需要全部访问它们。 a href标记的ID后跟随机数,与P #####值不对应。
这是HTML的样子(不是真实的):
<tbody>
<tr>
<td>1.</td>
<td>P12345 randomwordshere</td>
<td>..</td>
<td>..</td>
<td>
<ul>
<li>..</li>
<li>..</li>
<li><a id="disable_###" href="link">Disable</a></li>
</ul>
</td>
</tr>
<tr>
<td>2.</td>
<td>P23456 otherrandomwords</td>
<td>..</td>
<td>..</td>
<td>
<ul>
<li>..</li>
<li>..</li>
<li><a id="disable_###" href="link">Disable</a></li>
</ul>
</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
</tbody>
到目前为止,我的python代码的哪一部分看起来没有成功。
for x in range(0, num_rows):
value = str(sheet.cell(x, 0))
pcode = value[7:len(value) - 1]
browser.implicitly_wait(10)
browser.find_element_by_xpath("//*[contains(text(), '" + pcode + "')]")
browser.find_element_by_xpath("//td/ul/li[contains(@id, 'disable')]").click() #this part is definitely wrong
那么如何在我所拥有的相同P ####值的行中找到每个禁用链接?
答案 0 :(得分:0)
您需要找到pcode,然后执行以下操作以查找禁用。你目前正在这样做的方法就是抛弃第一个find_element。
这些方面的东西应该有用(它对我有用)。我认为对于python来说,它是跟随兄弟的。
(//*[contains(., 'P')]/following::li/a[contains(@id, 'disable')])[i]
将你的pcode放在'P'所在的位置,然后用for循环递增结果,这就是'[i]'的索引在最后。
显然,您需要进行自己的编辑,因为我们没有完整的代码来提供完整的答案,但这应该让您从正确的道路开始。
答案 1 :(得分:0)
您可以使用XPath执行此操作。
//td[contains(.,'P12345')]//following::a[starts-with(@id,'disable_')]
此XPath会查找包含您的P#的TD
,然后查找标有以&#39;禁用_&#39;开头的ID的第一个A
标记。
您需要更换&#39; P12345&#39;使用Excel中每个循环的值。这将返回所有禁用链接。只要您使用find_element()
,它就会始终返回您想要的第一个。
答案 2 :(得分:0)
首先,使用下面的模式找到构成pcode的tr:
//tr[td[contains(text(), 'Database')]]
假设这里的pcode是'数据库'
然后从找到的tr中找到“禁用”链接,如下所示:
//tr[td[contains(text(), 'Database')]]//a[text()='Disable']
尝试以下代码:
for x in range(0, num_rows):
value = str(sheet.cell(x, 0))
pcode = value[7:len(value) - 1]
browser.implicitly_wait(10)
browser.find_element_by_xpath("//tr[td[contains(text(), '" + pcode + "')]]//a[text()='Disable']").click()