繁体   English   中英

selenium,xpath:如何在节点内选择一个节点?

[英]selenium, xpath: How to select a node within node?

我有一个结构如下的网页:

<div class="l_post j_l_post l_post_bright "...>
    ...
    <div class="j_lzl_c_b_a core_reply_content">
       <li class="lzl_single_post j_lzl_s_p first_no_border" ...>
         <div class="lzl_cnt">
         content
         </div>
       </li>
       <li class="lzl_single_post j_lzl_s_p first_no_border" ...>
       ...
       </li>
    </div>

</div>
<div class="l_post j_l_post l_post_bright "...>
...(contain content, same as above)
</div>
...

目前,我可以像这样一步选择所有内容:

for i in driver.find_elements_by_xpath('//*[@class="lzl_cnt"]'):
    print(i.text)

但正如您所看到的,该网页由包含我所需内容的重复块组成, 因此,我想分别获取这些内容以及这些重复块之间存在差异的其他信息( <div class="l_post j_l_post l_post_bright "...>...</div> ),此外,我希望将<li class ="lzl_single_post"...>那些内容分开,以便我以后更轻松地处理这些内容 我尝试了这个:

items = []

# get each blocks
for sel in driver.find_elements_by_xpath('//div[@class="l_post j_l_post l_post_bright  "]'):
    name = sel.find_element_by_css_selector('.d_name').text
    try: content = sel.find_element_by_css_selector('.j_d_post_content').text
    except: content = '',
    try: 
        reply = []
        # get each post within specific block
        for i in sel.find_elements_by_xpath('//*[@class="lzl_cnt"]'):
            reply.append(i.text)
    except: reply = []
    items.append({'name': name, 'content': content, 'reply': reply})

但是结果表明, 每次外部for循环运行时,我都会在网页上获得所有答复,而不是我想要的每个单独块的答复集

有什么建议么?

只需添加即可. (上下文指针)作为

sel.find_elements_by_xpath('.//*[@class="lzl_cnt"]')

请注意, //*[@class="lzl_cnt"]表示DOM中所有具有"lzl_cnt"类名的 节点,.//*[@class="lzl_cnt"]表示所有sel属于"lzl_cnt"类的后代的节点名称

暂无
暂无

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

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