当前位置: 首页 > 知识库问答 >
问题:

Selenium Python在html表td列中有2个跨度标签,如何将2个值取出

吴高洁
2023-03-14

我有一个包含一些行和列的html表
在第6列中,单个td标记中有2个span标记。每个span标记都有一个值。表中第6列中的值为4,第6列中的值为24的行,我想得到值4和24,其中第2列的文本为all\u matches\u filtered,第4列的文本为Do\u Name和Do\u Name2

在Selenium Python脚本中,我将验证文本all\u matches\u filtered和文本Do\u Name和Do\u Name2的值是否为4和24

我可以使用什么XPath来定位值4和24?

我已经开始使用Xpath,它定位文本all_matches_filtered的值4。我想包括文本Do_Name它与值4在同一行中

我的Xpath是:

//table[@id="reporting_reports_ct_fields_body"]//tr//td//div//span[contains(text(), "all_matches_filtered")]/following::td[6]//div//span[(text()="4")]

HTML片段是(我缩短了HTML,否则它会很长):

<table id="reporting_reports_ct_fields_body" cellspacing="0" style="table-layout: fixed; width: 100%;">
<colgroup>
<tbody>
<tr class="GJPPK2LBFG GJPPK2LBMG" __gwt_subrow="0" __gwt_row="0">
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBHG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2169" style="outline-style:none;" tabindex="0">
            <input type="checkbox" tabindex="-1"/>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2170" style="outline-style:none;">
            <span class="linkhover" title="all_matches_filtered"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">all_matches_filtered</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2171" style="outline-style:none;">
            <span class="" title="manual"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">manual</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2172" style="outline-style:none;">
            <span class="linkhover block" title="Do_Name"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">Do_Name</span>
            <span class="linkhover block" title="Do_Name2"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">Do_Name2</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2173" style="outline-style:none;">
            <span class="" title="This is a matches report"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">This is a matches report</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2174" style="outline-style:none;">
            <span class="" title="USN entities"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">USN entities</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2175" style="outline-style:none;">
            <span title="16/03/2016 10:36:45"
                  style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">16/03/2016 10:36:45</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG">
        <div __gwt_cell="cell-gwt-uid-2176" style="outline-style:none;">
            <span class="block" title="" style="">4</span>
            <span class="block" title="" style="">24</span>
        </div>
    </td>
    <td class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBBH GJPPK2LBNG">
</tr>
<tr class="GJPPK2LBEH" __gwt_subrow="0" __gwt_row="1">
<tr class="GJPPK2LBFG" __gwt_subrow="0" __gwt_row="2">
<tr class="GJPPK2LBEH" __gwt_subrow="0" __gwt_row="3">
</tbody>

谢了Riaz

共有2个答案

佟和平
2023-03-14

尝试此代码

from selenium import webdriver
driver = webdriverFirefox()  # driver = webdriverChrome()
driver.get('inser_page_URL_where_table_located')
table_data = driver.find_elements_by_xpath('//td[@class="GJPPK2LBEG GJPPK2LBGG GJPPK2LBNG"]')[-1]
values = []
for i in table_data.find_elements_by_tag_name('span'):
    values.append(i.text)
print values

如果发生任何异常,请告诉我

巫马令
2023-03-14

首先,为
获取右一行,其中第2列有文本all_matches_filtered,第4列有文本Do_Name和Do_Name2

这将是:

/table[@id="reporting_reports_ct_fields_body"]//tr[
  td[2]//span[contains(text(), "all_matches_filtered")] and 
  td[4]//span="Do_Name"
]

并在此处形成右列(例如)

/td[8]//span

这有点像:

//table[@id="reporting_reports_ct_fields_body"]//tr[td[2]//span[contains(text(), "all_matches_filtered")] and td[4]//span="Do_Name"]/td[8]//span
 类似资料:
  • 问题内容: 我正在尝试获取2 h1标签之间的所有html。实际的任务是根据h1(heading 1)标签将html分成几帧。 感谢任何帮助。 谢谢苏尼尔 问题答案: 如果要获取和处理两个连续标签之间的所有元素,则可以处理同级对象。这是一些示例代码:

  • 问题内容: 我有2个查询,如下所示: 第二个: 我如何在这两者之间划分计数?它将始终仅返回2个值,一个将称为Exp,而一个将称为NonExp。 谢谢 问题答案: 基本上将这两个查询视为子查询,如下所示。 如果您想更进一步,则可以将cvu.id作为选择和修改联接的一部分,以便可以在所有cvu.id的

  • 问题内容: 我有2个列表,每个列表大小相等,并且有兴趣将这两个列表合并并将其写入文件。 -结果列表应类似于[(1,2 ,,(2,3),(3,4),(5,5)] 之后,我希望将其写入文件。我怎样才能做到这一点? 问题答案: 文件中的结果输出为:

  • 我需要使用一些库导出产品名称,SKU和价格到一个CSV文件。此库使用PDO连接,需要SQL查询。 我想选择名称,SKU和价格从2个WordPress表,即wp_posts和wp_postmeta。 我不知道如何从“meta_-value”列中两次获取“meta_-key”=“u-price”和“meta_-key”=“u-sku”的数据,例如。 我目前的查询:

  • 有没有办法通过两个列表< code>join两个< code > Spark data frame 具有不同的列名? 我知道如果他们在列表中有相同的名字,我可以做以下事情: 或者,如果我知道不同的列名,我可以这样做: 由于我的方法需要2个列表的输入,这些列表指定哪些列将用于每个DF的,因此我想知道Scala Spark是否有办法做到这一点? 页(page的缩写)我在寻找类似python的东西< c

  • 我有2个系列1的联系值是列表,这个列表是第二个系列的联系索引,我称之为s1和s2 如何在s2列表的基础上找到s1列表的和而不使用for循环? 我想要的输出是这样的 谢谢