首页 > 解决方案 > Selenium/Python 根据同一行中的值单击表格单元格中的超链接

问题描述

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

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

<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 代码片段

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

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

xpath 代码应该是什么?

标签: pythonpython-3.xselenium

解决方案


span用文本T276066查找然后找到它的祖先tr然后深入到相关的内容怎么样td/a,请参见以下内容:

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

推荐阅读