繁体   English   中英

如何使用 python 中的 selenium webdriver 从 html 表中的特定行获取数据

[英]How to get data from a specific row within an html table by using selenium webdriver in python

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

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

我将如何 go 这样做? 如果你愿意,我还可以分享我的代码,展示如何到达餐桌。

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

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 上查找元素并获取文本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM