在Python中使用Selenium在表类中搜索span标签

时间:2018-12-21 13:04:36

标签: python selenium-webdriver xpath css-selectors webdriver

我正在尝试使登录网站并执行搜索和添加属性的过程自动化。我已经做到了,但是现在需要它来在滚动容器中找到ID。现在尝试查找添加的ID,然后在窗口中单击它。在我所知道的方法中发现的问题是,它必须是可见的,并且无法找到使用嵌入式滚动容器构建WebUI的方法。

因此,我一直在研究HTML,并认为可以通过这种方式进行操作,但是只需要一点指导,因为我在搜索中没有找到任何可以完全满足我需求的东西。

在示例HTML中,您将看到我需要搜索的数据在tr标签和td class="readonly-cell cell-selected cell-selected-primary sheet-coll中。

我正在尝试获取td标签中<span>中的ID GPC_material。

我一直在与WebDriver一起使用,以查看是否可以搜索ID,但是在尝试排除故障以使进程向下滚动滚动容器以查找ID时遇到麻烦。

HTML:

<table class="sheet-table horizontal-sheet-table last-row-horizontal-content-page">
 <tbody>
  <tr class="odd" style="height:32px;">
   <td class="readonly-cell cell-selected cell-selected-primary sheet-coll" data-col="0" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
     <span>
      GPC_material
     </span>
    </div>
   </td>
   <td class=" sheet-coll" data-col="1" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
    </div>
   </td>
   <td class=" sheet-coll" data-col="2" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
    </div>
   </td>
   <td class=" sheet-coll" data-col="3" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
     <span class="gwt-CheckBox">
      <input id="gwt-uid-912x133x3x604577791" tabindex="-1" type="checkbox"/>
      <label for="gwt-uid-912x133x3x604577791">
      </label>
     </span>
    </div>
   </td>
   <td class=" sheet-coll" data-col="4" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
    </div>
   </td>
   <td class=" sheet-coll" data-col="5" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
    </div>
   </td>
   <td class="readonly-cell sheet-coll" data-col="6" data-row="133" style="display: table-cell; width:100px;" title="">
    <div class="sheet-cell" style="max-height:28px">
    </div>
   </td>
  </tr>
  </tbody>
</table>

我以前尝试过的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)

attribute_id = 'GPC_material'

table = wait.until(driver.find_element(By.XPATH, "//tr/td[@class ='readonly-cell cell-selected cell-selected-primary sheet-coll']"))

最终目标是搜索ID,然后单击“ click”,因为在该行级别,我将需要执行可能的处理,例如在单元格中插入“ Y”,如果需要则单击单选并插入数字沿着ID的同一行插入另一个单元格。

1 个答案:

答案 0 :(得分:0)

要找到文本为 GPC_material 的元素,可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    GPC_material_element = driver.find_element_by_css_selector("table.sheet-table.horizontal-sheet-table.last-row-horizontal-content-page td.readonly-cell.cell-selected.cell-selected-primary.sheet-coll>div.sheet-cell>span")
    
  • 使用XPATH

    GPC_material_element = driver.find_element_by_xpath("//table[@class='sheet-table horizontal-sheet-table last-row-horizontal-content-page']//td[@class='readonly-cell cell-selected cell-selected-primary sheet-coll']/div[@class='sheet-cell']/span[normalize-space()='GPC_material']")