使用Python,Selenium和XPath刮取动态行表

时间:2017-11-07 13:33:50

标签: python selenium xpath

我正在尝试使用Python中的Selenium和XPath来获取表中的“SIRET”行。 我尝试过不同类型的XPath,但我无法做到。 一个问题是“class =”reportRow“”元素正在动态变化,并且在位置编号后不能报废。 “SIRET”原始和他的“td类”子元素值,可以在“SIRET”文本之后或以其他方式报废?

这是我访问网站时所做的手动步骤:

该网站仅包含根域。 通过登录数据访问网站后,我输入一个搜索条件,打开一个页面,我必须单击一个链接,打开一个弹出窗口的表格。 该表包含4行和8列,第一行包含列的名称,另外3行包含数据作为“SIRET”。 这3行的位置会定期更改,具体取决于从特定服务器收到的数据。 这就是为什么我想通过“SIRET”文本来填补这一行和他的价值观。

我的最终刮削数据应如下所示:SIRET 646 90 0.2%$ 2.94 1.03 0.07 4.52。

非常感谢您的投入。

<div class="table_container">
<table>
    <tbody>
        <tr class="reportHead">.....</tr></tbody>
    <tbody>
        <tr class="reportRow  ">....</tr> 
        <tr class="reportRow  ">....</tr>
        <tr class="reportRow  ">
            <td data-actual="SIRET" class="reportKeyword">SIRET</td>
            <td class="td2">646</td>
            <td class="td1">90</td>
            <td class="rcr">0.2%</td>
            <td class="td1">$2.94</td>
            <td class="td1">1.03</td>
            <td class="td1">0.07</td>
            <td class="td1 rctl">4.52</td>
        </tr>
    </tbody>
    <tfoot style="display: none;">....</tfoot>
</table>

3 个答案:

答案 0 :(得分:2)

您可以像这样使用xpath

SIRET= driver.find_element_by_xpath("//td[@data-actual='SIRET']")

然后您可以使用.text操作来获取文本

如果数据在动态变化,则必须使用

SIRET= driver.find_element_by_xpath("//td[@class='reportKeyword']")

答案 1 :(得分:0)

如果我已正确理解了这个问题,那么您正试图从动态变化的"SIRET"节点获取字符串<td>。为此,您可以使用以下代码行:

print(driver.find_element_by_xpath("//td[@class='reportKeyword']").get_attribute("innerHTML"))

答案 2 :(得分:0)

奇怪。实际上,解决方案并不那么复杂:

driver.find_element_by_xpath("//td[@data-actual='SIRET']/../td")