一尘不染

过滤掉标记属性或其CSS中具有“ display:none”的HTML元素

selenium

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

from selenium import webdriver
from bs4 import BeautifulSoup

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

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

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

要么

2.)display:none在页面的CSS中具有该属性


阅读 554

收藏
2020-06-26

共1个答案

一尘不染

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

好消息是,selenium实际上处理这种使用情况下,只要你得到.textWebElement-它会返回你一个
元素的可见文本 是需要的到底是什么。

演示:

In [1]: from selenium import webdriver

In [2]: driver = webdriver.Firefox()

In [3]: driver.get("http://proxylist.hidemyass.com/")

In [4]: for row in driver.find_elements_by_css_selector("section.proxy-results table#listable tr")[1:]: 
   ...:     cells = row.find_elements_by_tag_name("td")
   ...:     print(cells[1].text.strip())
   ...: 
101.26.38.162
120.198.236.10
213.85.92.10
...
216.161.239.51
212.200.111.198
2020-06-26