Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 美丽的汤找到隐藏的元素风格_Python_Html_Beautifulsoup - Fatal编程技术网

Python 美丽的汤找到隐藏的元素风格

Python 美丽的汤找到隐藏的元素风格,python,html,beautifulsoup,Python,Html,Beautifulsoup,我的简单需要。 如何查找当前网页上不可见的元素?我猜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" clas

我的简单需要。 如何查找当前网页上不可见的元素?我猜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">
因此,我首先担心的是,BeautifulSoup无法发现上述任何文本框是否被隐藏:

# 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,也就是说,如果BeautifulSoup的元素可能隐藏

,恐怕你需要明确地检查用来隐藏元素的属性:

soup = BeautifulSoup(source)
tbi1 = soup.find(id='tbi1')
tbi2 = soup.find(id='tbi2')
print tbi1['style'] == 'visibility:hidden'
print tbi2['class'] == 'hidden_elements'
BeautifulSoup是一个html解析器,而不是浏览器。它不知道页面应该如何呈现,计算DOM属性等等,它检查尖括号的开始和结束位置


如果需要在运行时使用DOM,最好使用浏览器自动化包,即启动浏览器,让浏览器使用页面,然后公开浏览器控件和计算出的DOM。根据平台的不同,您有不同的选择。查看Python WIki上的想法,查看关于Web库和浏览器技术的Python包装部分。

试试这个bs4,对我有用:

print soup1.select( '[style~="visibility:hidden"]' )
print soup1.select( '[style~="display:none"]' )
.选择CSS2选择器使用的方法:
嘿,也许有人还需要这个 我使用的一个技巧是更换顶部 这样地
soup=BeautifulSoupurl.text.replace'谢谢回复。但是,如果父对象被隐藏起来,情况会变得非常复杂。另外,如果一个类的元素是隐藏的,我需要知道哪些类隐藏了元素,哪些不隐藏。我只想找到所有没有隐藏的元素。有解决办法吗?谢谢如果你需要知道关于类的细节,那么你也需要解析css。为什么你需要知道哪些元素是隐藏的?你想实现什么?我想找到所有只对用户可见的HTML元素-但是这样做的目的是什么?也许还有另一种更现实的方式来实现你的实际目标。除非html非常非常简单,否则尝试使用html解析器来解释css样式规则显然是行不通的。因此,我们的目标是根据网页上看到的文本找到可见的web元素。我已经决定使用这个方法,那么你有没有可能接受我的答案?它暗示了你决定要做的事情:你好,贾科莫,谢谢你的回复!!是的,我明白你的意思。事实上,我已经在用硒了。所以,让我先详细地向你们解释一下我想要实现的目标,以便你们能给我一个更好的建议。有一个网页,其中有所有的HTML元素,如:Cont。。。在接下来的评论中,这里继续。。。我想做的是,从Python中生成简单的方法/函数,这些方法/函数可以自动化和HTML元素的交互。例如:单击按钮按钮“发送数据”。我可以使用Selenium的Python客户端轻松编写这些方法。但是,Selenium的Python客户机仅将元素定位器作为参数。现在,我需要根据网页上的文本创建这些定位器。这可以通过解析BeautifulSoup非常有用的网页来实现。我希望你明白我的想法。谢谢,从Selenium文档中粗略地看一下,您似乎可以通过DOM定位元素;如果这是真的,您应该能够获得与样式相关的节点成员,或者在最坏的情况下,样式属性应该包含特定于该节点的完整css声明。但我不是硒的专家,所以我不知道;我过去只在IE上使用win32绑定做过这种事情。