Python selenium - 迭代读取表中的特定元素

时间:2015-10-12 07:38:37

标签: python selenium selenium-webdriver web-scraping webdriver

我正在尝试从此表中读取定期更改的信息。 HTML看起来像这样:

<table class="the_table_im_reading">
  <thead>...</thead>
  <tbody>
    <tr id="uc_6042339">
      <td class="expansion">...</td>
      <td>
        <div id="card_6042339_68587" class="cb">
          <a href="/uniquelink" class="cl" onmouseover="cardHover('somecard');" onmouseout="cardOut()">TEXT I NEED TO READ</a>
      </td>
      <td>...</td>
      more td's
    </tr>
    <tr id="uc_6194934">...</tr>
      <td class="expansion">...</td>
      similar as the first <tr id="uc...">

我能够使用以下方式进入桌面:

table_xpath = "//*[@id="content-wrapper"]/div[5]/table"
table_element = driver.find_element_by_xpath(table_xpath)

我正在尝试阅读每个唯一<tr id="uc_unique number">.我需要阅读部分的文本.id = uc_unique数字会定期更改,所以我不能使用find元素。

是否有办法覆盖该元素并阅读该特定文本?

2 个答案:

答案 0 :(得分:3)

看起来你可以通过anchor-element链接(href-attribute)进行搜索,因为我猜这不会改变。

通过xpath:

yourText = table_element.find_element_by_xpath(.//a[@href='/blahsomelink']).text

更新

OP提到他的链接也在变化(每次调用?),这意味着第一种方法不适合他。

如果你想要第一个row-element的文本,你可以试试这个:

yourText = table_element.find_element_by_xpath(.//tr[1]//a[@class='cl']).text

如果你知道例如link元素总是在第一行的第二个数据元素中并且只有一个link-element,那么你可以这样做:

yourText = table_element.find_element_by_xpath(.//tr[1]/td[2]//a).text

除非你对你真正想要的东西提供更详细的要求,否则到目前为止这已经足够......

另一个更新

OP提供了有关其要求的更多信息:

  

我想在每一行中获取文字。

鉴于在每个tr元素中只有一个具有类cl的锚元素,您可以执行以下操作:

elements = table_element.find_elements_by_xpath(.//tr//a[@class='cl'])
for element in elements:
    row_text = element.text

现在你可以用所有这些文本做任何你想做的事......

答案 1 :(得分:1)

看起来你有几个选择。

如果你想要的只是第一个A,它可能就像

一样简单
table_element.find_element_by_css_selector("a.cl")).text

或更具体的

table_element.find_element_by_css_selector("div.cb > a.cl")).text

如果您想要所有A,请尝试以上find_elements_*版本。