【问题标题】:Selenium/Python click on hyperlink in table cell based on value in same rowSelenium/Python 根据同一行中的值单击表格单元格中的超链接
【发布时间】:2020-07-03 16:47:37
【问题描述】:

我相信我遇到了与问题 Python & Selenium Clicking on td value in a row based on another td in the same row 类似的问题

表格布局(为了清楚起见,我删除了我不感兴趣的列数据):

<tbody>
<tr class="FontWeightBold">
    <td>Title ID</td>
    <td>Primary Author Last Name</td>
    <td>Title: Edition</td>
    <td>Draft Due</td>
    <td>Final Due</td>
    <td>Est. Trans. Date</td>
    <td>Target Pub. Date</td>
    <td><td>
    <td><td>
</tr>
<tr>
    <td>
        <span id="SmartMasterContent_TitleProposalContent_dgProposals_lBookID_0">T276065</span>
    </td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td> 
        <a id="SmartMasterContent_TitleProposalContent_dgProposals_lbAccept_0" href="javascript:__doPostBack('ctl00$ctl00$SmartMasterContent$TitleProposalContent$dgProposals$ctl02$lbAccept','')">Request ISBN</a>
    </td>
    <td>..</td>
</tr>
<tr>
    <td>
        <span id="SmartMasterContent_TitleProposalContent_dgProposals_lBookID_1">T276066</span>
    </td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>..</td>
    <td>
        <a id="SmartMasterContent_TitleProposalContent_dgProposals_lbAccept_1" href="javascript:__doPostBack('ctl00$ctl00$SmartMasterContent$TitleProposalContent$dgProposals$ctl03$lbAccept','')">Request ISBN</a>
    </td>
    <td>..</td>
</tr>

示例问题。我想点击标题 ID(第一列)为“T276066”的表格行的“请求 ISBN”链接。

我遇到的一个问题是链接的 id 将附加行号,而我正在查看的记录可能位于表格上的任何位置。

我的 Python 代码 sn-p

Request_ISBN = driver.find_element_by_xpath('//a[text()="T276066"]/parent::td/preceding-sibling::td/a[text() = "Request ISBN"]')

为了尝试减少可能产生错误的区域,我已将 Title ID 硬编码到 XPath 中,但是一旦代码工作,它将被替换为变量。

xpath 代码应该是什么?

【问题讨论】:

    标签: python python-3.x selenium


    【解决方案1】:

    如何查找带有文本T276066span,然后查找其祖先tr,然后向下钻取到相关的td/a,请参见以下内容:

    driver.find_element_by_xpath("//span[text()='T276066']/ancestor::tr/td/a[text()='Request ISBN']").click()
    

    【讨论】:

    • 那太好了。我只需要在 T276066 之后删除右括号,因为它会引发错误。之后所有的工作
    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多