【问题标题】:How to get data from a specific row within an html table by using selenium webdriver in python如何通过在 python 中使用 selenium webdriver 从 html 表中的特定行获取数据
【发布时间】:2020-05-24 09:03:32
【问题描述】:

我对 python 和 selenium 完全陌生,所以请原谅所有的错误和错误的假设。

我尝试从始终位于第 4 列的 html 表中获取某个值,而该行可能会根据搜索结果而改变。 html 代码的构建方式是,每个 tr 都有一个 th scope="row" 作为子级,然后还有 4 个 tds 作为同一级别的子级。现在我的代码需要做的是:找到 th scope="row"="MyString" 的 tr,然后进入第 4 列,所以 td[4],然后再次输出该行的 th 和 td 中的值[4]。

这里是html代码

<div id="ctl00_ContentPlaceHolder1_dvDetailsTableAmbulantMisc">

                <table class="details-table ambulant misc nophone" role="grid">
                    <thead>
                        <tr role="row">
                            <th scope="col">Bezeichnung</th><th role="gridcell"></th>
                            <th scope="col">Kategorie</th><th role="gridcell"></th>
                            <th scope="col">Preis</th>
                        </tr>
                    </thead>
                    <tbody>

                <tr>
                    <th scope="row">Ganzwaschung</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl0_tdPreis1">24,39</td>

                </tr>

                <tr>
                    <th scope="row">Teilwaschung</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl1_tdPreis1">13,05</td>

                </tr>

                <tr>
                    <th scope="row">Ausscheidungen</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl2_tdPreis1">5,95</td>

                </tr>

                <tr>
                    <th scope="row">Selbständige Nahrungsaufnahme</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl3_tdPreis1">5,95</td>

                </tr>

                <tr>
                    <th scope="row">Hilfe bei der Nahrungsaufnahme</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl4_tdPreis1">14,89</td>

                </tr>

                <tr>
                    <th scope="row">Sondenernährung bei implantierter Magensonde (PEG)</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl5_tdPreis1">5,95</td>

                </tr>

                <tr>
                    <th scope="row">Lagern/Betten</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl6_tdPreis1">5,95</td>

                </tr>

                <tr>
                    <th scope="row">Mobilisation (Mindeseinsatzdauer 15 Minuten)</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl7_tdPreis1">10,71</td>

                </tr>

                <tr>
                    <th scope="row">Waschen und Pflegen der Wäsche und Kleidung</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl8_tdPreis1">20,61</td>

                </tr>

                <tr>
                    <th scope="row">Große Grundpflege mit Lagern/Betten und selbständiger Nahrungsaufnahme</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl9_tdPreis1">36,24</td>

                </tr>

                <tr>
                    <th scope="row">Große Grundpflege</th><td></td>
                    <td>Körperbezogene Pflegemaßnahmen</td><td></td>
                    <td id="ctl00_ContentPlaceHolder1_lvDetailsTableAmbulantMisc_ctrl10_tdPreis1">26,74</td>

我该怎么做呢?如果你愿意,我还可以分享我的代码,展示如何到达餐桌。

【问题讨论】:

    标签: python selenium html-table


    【解决方案1】:

    你可以做这样的事情......

    rows = driver.find_elements_by_css_selector('.details-table tbody>tr')
    row = next(filter(lambda x: x.find_element_by_xpath('th[1]').text == 'MyString', rows))
    value = row.find_element_by_xpath('td[4]').text
    

    rows 为您提供所有行。
    row 进行过滤并找到与 MyString 匹配的第一个 foreach 行,然后返回该行(因此我们仍处于 tr 级别)。
    value 然后通过查找 td[4] 在该 tr 上查找元素并获取文本

    【讨论】:

    • 嗨,Prab,感谢您的回答。如果我这样做并输入例如字符串“Teilwaschung”,我总是会得到“StopIteration”,这可能意味着它没有找到搜索到的字符串。
    • 我明白了! css 选择器不起作用,当我使用 find_elements_by_xpath 时,我让它工作了!非常感谢你,我的朋友:)
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2020-07-03
    相关资源
    最近更新 更多