[英]How to extract the text out of a list element between a ::before and ::after using Selenium and Python
[英]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
如果可以同时使用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']]
您的代码无法正常工作似乎很奇怪。 我还没有遇到过这样的案子。 我认为下面的代码应该工作。 基本上,我会在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_*
命令直接匹配文本节点。
在您的情况下,我假设您事先知道LIQ
, ESTADO
等标签,并且需要通过标签获取值。
这个想法是通过文本定位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.