美丽的汤找到隐藏着麦粒的元素

2024-10-17 06:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我的简单需要。 如何查找网页上当前不可见的元素?我猜style="visibility:hidden"style="display:none"是隐藏元素的简单方法,但是BeautifulSoup不知道它是否隐藏。

例如,HTML是:

Textbox_Invisible1: <input id="tbi1" type="text" style="visibility:hidden">
Textbox_Invisible2: <input id="tbi2" type="text" class="hidden_elements">
Textbox1: <input id="tb1" type="text">

因此,我首先担心的是,BeautifulGroup无法发现是否隐藏了上述任何文本框:

# Python 2.7
# Import BeautifulSoup
>>> source = """Textbox_Invisible1: <input id="tbi1" type="text" style="visibility:hidden">
...  Textbox_Invisible2: <input id="tbi2" type="text" class="hidden_elements">
...  Textbox1: <input id="tb1" type="text">"""
>>> soup1 = BeautifulSoup(source)
>>> soup1.find(id='tb1').hidden
False
>>> soup1.find(id='tbi1').hidden
False
>>> soup1.find(id='tbi2').hidden
False
>>> 

我唯一的问题是,有没有办法找出隐藏的元素? (我们还必须考虑复杂的HTML,其中having元素可能被隐藏)


Tags: textid元素inputstyletypefindhidden
3条回答

BeautifulSoup是一个html解析器,而不是浏览器。它不知道该如何呈现页面、计算出的DOM属性等等,它正在检查尖括号的开始和结束位置。

如果需要在运行时使用DOM,最好使用浏览器自动化包,即启动浏览器,让浏览器使用页面,然后公开浏览器控件和计算出的DOM。根据平台的不同,您有不同的选择。请查看Python WIki上的this page以获取一些想法,查看Web“库”和浏览器技术周围的Python包装。

对于BeautifulSoup,恐怕您需要显式检查用于隐藏元素的属性:

soup = BeautifulSoup(source)
tbi1 = soup.find(id='tbi1')
tbi2 = soup.find(id='tbi2')
print tbi1['style'] == 'visibility:hidden'
print tbi2['class'] == 'hidden_elements'

试试这个(bs4),对我有用:

print soup1.select( '[style~="visibility:hidden"]' )
print soup1.select( '[style~="display:none"]' )

。使用CSS2选择器选择方法: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors

相关问题 更多 >