python - 如何通过多行和每行单元格的表格中的部分文本查找元素?

标签 python html selenium xpath

我的目标基本上是让 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#### 值的行中找到每个禁用链接?

最佳答案

您需要找到 pcode,然后执行以下操作以找到禁用。您目前的做法是丢弃第一个 find_element。

按照这些思路应该可行(对我有用)。我认为对于 python 来说,它是 following-sibling。

(//*[contains(., 'P')]/following::li/a[contains(@id, 'disable')])[i]

将您的 pcode 放在 'P' 所在的位置,然后使用 for 循环递增结果,这就是最后 '[i]' 的索引。

显然您需要进行自己的编辑,因为我们没有完整的代码来给出完整的答案,但这应该让您在正确的道路上开始。

关于python - 如何通过多行和每行单元格的表格中的部分文本查找元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065269/

相关文章:

python - 在 Python 中延迟转置列表

html - 可以对转换样式的属性使用转换延迟吗?

javascript - 如何使用jquery通过具有特殊字符的名称属性来定位输入元素?

python - Selenium -Firefox : Firefox browser crashes when running my Selenium script

javascript - 我如何等待元素在 WebDriverJS 中可点击?

Python - 在 PyQt5 中循环创建按钮

python - django rest 框架身份验证

python - 在 Django 中使用 Ajax 时卡在 View 中

javascript - 获取点击位置

python - 将 URL 从数据库传递到 webdriver 时出错