繁体   English   中英

使用Selenium Python选择嵌套的html元素

[英]Selecting nested html elements using selenium python

我是硒(PYTHON)新手,一度陷入困境,需要专家的帮助。 我的html是这样的:

    <div id='d3_tree'>
       <svg>
         <g transform="translate(20,50)>
            <g class='node'>
                <foreignobject></foreignobject>
                <original_title>
                   <table>
                       <tbody>
                          <tr>
                              <td>t1key1</td>
                              <td>t1val1</td>  
                          </tr> 
                          <tr>
                              <td>t1key2</td>
                              <td>t1val2</td>  
                          </tr> 
                          <tr>
                              <td>t1key3</td>
                              <td>t1val3</td>  
                          </tr> 
                       </tbody> 
                   </table>
                </original_title> 
            </g> 
            <g class='node pe_node'>
                <foreignobject></foreignobject>
                <original_title>
                   <table>
                       <tbody>
                          <tr>
                              <td>t2key1</td>
                              <td>t2val1</td>  
                          </tr> 
                          <tr>
                              <td>t2key2</td>
                              <td>t2val2</td>  
                          </tr> 
                          <tr>
                              <td>t2key3</td>
                              <td>t2val3</td>  
                          </tr> 
                       </tbody> 
                   </table>
                </original_title> 
            </g>
            <g class='node pe_node'>
                <foreignobject></foreignobject>
                <original_title>
                   <table>
                       <tbody>
                          <tr>
                              <td>t3key1</td>
                              <td>t3val1</td>  
                          </tr> 
                          <tr>
                              <td>t3key2</td>
                              <td>t3val2</td>  
                          </tr> 
                          <tr>
                              <td>t3key3</td>
                              <td>t3val3</td>  
                          </tr> 
                       </tbody> 
                   </table>
                </original_title> 
            </g> 
         </g>
       </svg>

</div>

我需要的是拥有类node.pe_node的所有元素,并且在每个node.pe节点元素内部,我需要表的第三行第二列的文本。 (t2val3 t3val3)

我能够获得具有类node.pe_node的元素

pe_nodes = self.driver.find_elements_by_css_selector(".node.vm.node_pe")

现在我遍历pe_nodes以获取第三列的值

  for node in pe_nodes:
     petext = node.find_element(By.XPATH, "//tr[3]/td[2]").text //not working
     petext = node.find_element(By.XPATH, "//tr[3]/td[2]").get_text() //not working

有人可以指导我如何获取所需的文字吗? 有没有一种方法可以引用每个节点元素中的表列?

import bs4

soup = bs4.BeautifulSoup(html)
node_pe = [s for s in soup.find_all('g')
           if 'pe_node' in s.attrs.get('class', [])]
col_texts = [s.find_all('tr')[2].find_all('td')[1].text
             for s in node_pe]
print col_texts

它产生:

[u't2val3', u't3val3']

我找到了方法

name = node.find_element_by_xpath(".//tr[2]/td[2]")text

暂无
暂无

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

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