繁体   English   中英

Python Selenium如何在元素后提取文本

[英]Python Selenium how extract text after element

这是我试图从中提取文本的HTML代码

<fieldset>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CNPJ:</label>011234560083
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CIDADE:</label>TAUBATE
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">ESTADO:</label>SP
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">TOTAL BRUTO: </label>2.407,09
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">LIQ: </label>2.344,09
    </div>
</fieldset>

此代码

print browse.find_element_by_xpath("//div[@class='grid-3-12 form-no-lbl']").text

仅返回第一个元素:011234560083

我想读取每个标签的值,例如“ LIQ:” = 2.344,09

如果可以同时使用seleniumlxml ,可以使用selenium导航到所需的页面,然后使用lxml解析HTML。 例如,

import lxml.html as LH
# content = browser.page_source
content = '''\
<fieldset>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CNPJ:</label>011234560083
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CIDADE:</label>TAUBATE
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">ESTADO:</label>SP
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">TOTAL BRUTO: </label>2.407,09
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">LIQ: </label>2.344,09
    </div>
</fieldset>'''

root = LH.fromstring(content)
labels = root.xpath('//fieldset/div[@class="grid-3-12 form-no-lbl"]/label')
data = [[item.strip() for item in [elt.text, elt.tail]] for elt in labels]

产量

[['CNPJ:', '011234560083'],
 ['CIDADE:', 'TAUBATE'],
 ['ESTADO:', 'SP'],
 ['TOTAL BRUTO:', '2.407,09'],
 ['LIQ:', '2.344,09']]

您的代码无法正常工作似乎很奇怪。 我还没有遇到过这样的案子。 我认为下面的代码应该工作。 基本上,我会在LABEL抓取文本并将其添加到您已经找到的文本之前。 该组合应该可以为您提供所需的文本。

lines = browse.find_elements_by_css_selector("div.grid-3-12.form-no-lbl")
for line in lines
    print line.find_element_by_css_selector("label.form-lbl").text + line.text

在硒中,这是一个相当普遍的问题。 只是因为您不能使用find_element_by_*命令直接匹配文本节点。

在您的情况下,我假设您事先知道LIQESTADO等标签,并且需要通过标签获取值。

这个想法是通过文本定位label ,将树向上移动到父节点,获取文本,用:分割,然后获取与所需值相对应的最后一个元素:

label = "ESTADO"
text = driver.find_element_by_xpath("//label[starts-with(., '%s:')]/.." % label).text
print(text.split(":")[-1].strip())

暂无
暂无

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

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