以下是我尝试从
中提取文本的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
答案 0 :(得分:1)
如果您可以同时使用selenium
和lxml
,则可以使用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']]
答案 1 :(得分:1)
您的代码无法正常工作,这似乎很奇怪。我没有遇到过这样的情况。我认为下面的代码应该有效。基本上我抓住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
答案 2 :(得分:0)
这是Selenium中一个相当普遍的问题。仅仅因为您无法使用find_element_by_*
命令直接匹配文本节点。
在您的情况下,我假设您事先知道LIQ
,ESTADO
等标签,并且需要通过标签获取值。
想法是通过文本找到label
,将树向上移动到父级,获取文本,按:
拆分并获取与期望值对应的最后一个元素:
label = "ESTADO"
text = driver.find_element_by_xpath("//label[starts-with(., '%s:')]/.." % label).text
print(text.split(":")[-1].strip())