使用 Python Selenium 遍历表行并打印列文本 [英] Iterate through table rows and print column text with Python Selenium

查看:37
本文介绍了使用 Python Selenium 遍历表行并打印列文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表格(

),其中每一行()的值都来自它的主体().

我想打印出来的值是在 <span> 中的

标签.

检查 html,我看到了值,例如名称"在第 1 行 (tr[1])、第 2 列 (td[2]) 中:

<td class="GAT4PNUEG GAT4PNUGG GAT4PNUHG GAT4PNUNG"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG"><div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;"><span class="linkhover" title="Name" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">名称</span>

</td>

我想遍历表格的每一行并打印出第 2 列 td[2] 中的值

我正在使用 Python 和 Selenium Webdriver

表格第 1 行第 2 列的完整 Xpath 为:

html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody/tr[1]/td[2]/格/跨度

我在想是否可以从表格开始,xpath如下:

html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody

然后我可以使用 for 循环并为 tr 和 td 使用索引例如,对于 row1 使用 tr[i],对于 col2 使用 td[2].

html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody/tr[i]/td[2]/div/span

如何遍历该表并打印出始终位于该表的第 2 列中的 Span 类标记的值?

我试图将表的开头放入一个变量中,然后我可以用它来循环遍历行和列.我需要一些帮助.

table = self.driver.find_element(By.XPATH, 'html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody')

这是完整的 HTML:

 
<colgroup><tr class="GAT4PNUFG GAT4PNUMG" __gwt_subrow="0" __gwt_row="0"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUHG GAT4PNUNG"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG"><div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;"><span class="linkhover" title="Name" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">名称</span>

</td><td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUBH GAT4PNUNG"></tr><tr class="GAT4PNUEH" __gwt_subrow="0" __gwt_row="1"><td class="GAT4PNUEG GAT4PNUFH GAT4PNUHG"><td class="GAT4PNUEG GAT4PNUFH"><div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;"><span class="linkhover" title="Address" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">地址</span>

</td><td class="GAT4PNUEG GAT4PNUFH"><td class="GAT4PNUEG GAT4PNUFH"><td class="GAT4PNUEG GAT4PNUFH"><td class="GAT4PNUEG GAT4PNUFH GAT4PNUBH"></tr><tr class="GAT4PNUFG" __gwt_subrow="0" __gwt_row="2"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUHG"><td class="GAT4PNUEG GAT4PNUGG"><div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;"><span class="linkhover" title="DOB" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">DOB</span>

</td><td class="GAT4PNUEG GAT4PNUGG"><td class="GAT4PNUEG GAT4PNUGG"><td class="GAT4PNUEG GAT4PNUGG"><td class="GAT4PNUEG GAT4PNUGG GAT4PNUBH"></tr><tr class="GAT4PNUEH" __gwt_subrow="0" __gwt_row="3">---<tr class="GAT4PNUFG" __gwt_subrow="0" __gwt_row="4">---</tbody>

解决方案

开发人员已将 ID 放入表中.我现在可以工作了.它正在打印第 2 列中的所有单元格值.代码是:

table_id = self.driver.find_element(By.ID, 'data_configuration_feeds_ct_fields_body0')rows = table_id.find_elements(By.TAG_NAME, "tr") # 获取表中的所有行对于行中的行:# 获取列(所有第2列)col = row.find_elements(By.TAG_NAME, "td")[1] #注意:索引从0开始,1是col 2print col.text #从元素打印文本

I have a table (<table>) with values in each row (<tr>) from its body (<tbody>).

The value I would lile to print out is in the <span> inside a <div> tag.

Inspecting the html, I see the value e.g. "Name" is in row 1 (tr[1]), column 2 (td[2]):

<tr class="GAT4PNUFG GAT4PNUMG" __gwt_subrow="0" __gwt_row="0">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUHG GAT4PNUNG">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG">
                <div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;">
                    <span class="linkhover" title="Name" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">Name</span>
                </div>
            </td>

I would like to loop through the table each row and print out the value in columns 2, td[2]

I am using Python with Selenium Webdriver

The full Xpath to the table row 1, column 2 is:

html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody/tr[1]/td[2]/div/span

I was thinking if i can start from the table, xpath as follows:

html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody

I can then use a for loop and use an index for the tr and td e.g for row1 use tr[i], for col2 use td[2].

html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody/tr[i]/td[2]/div/span

How can i loop through this table and print out the value of the Span class tag which is always in column 2 of the table?

I tried to get the start of the table into a variable and then I could maybe use this to loop through the rows and columns. I need some help please.

table = self.driver.find_element(By.XPATH, 'html/body/div[2]/div[2]/div/div[4]/div/div[2]/div/div[3]/div/div[5]/div/div[3]/div/div[4]/div/div[2]/div/div[4]/div/div[3]/div/div[2]/div/div/table/tbody')

Here's the full HTML:

    <table cellspacing="0" style="table-layout: fixed; width: 100%;">
    <colgroup>
    <tbody>
        <tr class="GAT4PNUFG GAT4PNUMG" __gwt_subrow="0" __gwt_row="0">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUHG GAT4PNUNG">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG">
                <div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;">
                    <span class="linkhover" title="Name" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">Name</span>
                </div>
            </td>
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUNG">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUBH GAT4PNUNG">
        </tr>
        <tr class="GAT4PNUEH" __gwt_subrow="0" __gwt_row="1">
            <td class="GAT4PNUEG GAT4PNUFH GAT4PNUHG">
            <td class="GAT4PNUEG GAT4PNUFH">
                <div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;">
                    <span class="linkhover" title="Address" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">Address</span>
                </div>
            </td>
            <td class="GAT4PNUEG GAT4PNUFH">
            <td class="GAT4PNUEG GAT4PNUFH">
            <td class="GAT4PNUEG GAT4PNUFH">
            <td class="GAT4PNUEG GAT4PNUFH GAT4PNUBH">
        </tr>
        <tr class="GAT4PNUFG" __gwt_subrow="0" __gwt_row="2">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUHG">
            <td class="GAT4PNUEG GAT4PNUGG">
                <div __gwt_cell="cell-gwt-uid-324" style="outline-style:none;">
                    <span class="linkhover" title="DOB" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;color:#00A;cursor:pointer;">DOB</span>
                </div>
            </td>
            <td class="GAT4PNUEG GAT4PNUGG">
            <td class="GAT4PNUEG GAT4PNUGG">
            <td class="GAT4PNUEG GAT4PNUGG">
            <td class="GAT4PNUEG GAT4PNUGG GAT4PNUBH">
        </tr>
        <tr class="GAT4PNUEH" __gwt_subrow="0" __gwt_row="3">
            ---
        <tr class="GAT4PNUFG" __gwt_subrow="0" __gwt_row="4">       
            ---
    </tbody>
</table>

解决方案

The developer has put an ID into the table. I have it working now. It is printing all the cell values from column 2. The code is:

table_id = self.driver.find_element(By.ID, 'data_configuration_feeds_ct_fields_body0')
rows = table_id.find_elements(By.TAG_NAME, "tr") # get all of the rows in the table
for row in rows:
    # Get the columns (all the column 2)        
    col = row.find_elements(By.TAG_NAME, "td")[1] #note: index start from 0, 1 is col 2
    print col.text #prints text from the element

这篇关于使用 Python Selenium 遍历表行并打印列文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆