过滤掉具有'display:none'的HTML元素作为标记属性或在CSS中

时间:2015-11-08 18:43:27

标签: python selenium selenium-webdriver web-scraping beautifulsoup

假设您有一些用Selenium抓取的html源代码,并使用BeautifulSoup解析:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)

有没有办法从html代码或汤对象中删除所有具有以下内容的元素:

1。)html标记源中的属性style=display:none(即<div style = 'display:none'>...</div>

2。)在页面的CSS中有display:none属性

1 个答案:

答案 0 :(得分:4)

我想我记得处理过这样的网站 - IP地址是通过多个HTML元素在内部表示的,其中一些是通过display: none样式隐藏的,有些有一个合适的CSS类使它们看不见。通过BeautifulSoup从这个混乱中获取真正的IP地址非常困难。

好消息是selenium实际上处理了这个用例,每当你得到.text的{​​{1}}时,它都会返回一个元素的可见文本正是所需要的。

演示:

WebElement