Python Selenium Webdriver如何在表中循环并打印出第2列的值

Ria*_*ani 13 python selenium html-table selenium-webdriver

我有一个带有桌子的网页.该表在第二个td列的每一行中都有一些值.我打算输出的值是在div标签内的span类中.检查html树我可以看到值,例如"Name"在第1行(tr [1]),第2列(TD [2])例如html

<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>
Run Code Online (Sandbox Code Playgroud)

我想遍历每一行的表并打印出第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]/div/span
Run Code Online (Sandbox Code Playgroud)

我在想如果我可以从表开始,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 /台/ 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
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

我忘了粘贴HTML.它是:

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')
Run Code Online (Sandbox Code Playgroud)

Ria*_*ani 21

开发人员已将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") # 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
Run Code Online (Sandbox Code Playgroud)

  • 如果 thead 有子 tr,它将不起作用。我建议添加:`tbody = table_id.find_element_by_tag_name('tbody')` (4认同)

ale*_*cxe 15

您当前使用的XPath 非常脆弱,因为它取决于完整的文档结构和元素的相对位置.它很容易在未来破裂.

而是使用其class属性或其他属性定位行.例如:

for row in driver.find_elements_by_css_selector("tr.GAT4PNUFG.GAT4PNUMG"):
    cell = row.find_elements_by_tag_name("td")[1]
    print(cell.text)
Run Code Online (Sandbox Code Playgroud)