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

标签 python selenium selenium-webdriver web-scraping beautifulsoup

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

from selenium import webdriver
from bs4 import BeautifulSoup

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

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

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

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

最佳答案

我想我记得处理过这样的网站 - IP 地址在内部通过多个 HTML 元素表示,其中一些通过 display: none 样式隐藏,一些具有适当的 CSS使他们隐形的类(class)。通过 BeautifulSoup 从这个困惑中获取真实的 IP 地址非常困难。

好消息是selenium实际上处理这个用例,每当你得到 WebElement.text - 它会返回你一个 元素的可见文本 这正是需要什么。

演示:

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

关于python - 过滤掉 'display:none' 作为标记属性或在其 CSS 中的 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597616/

相关文章:

java - 在 html 上,表格形式的数据,我如何使用 selenium web-driver java 单击并打印第二个位置的数据

javascript - C# Selenium Webdriver JavaScriptExecutor 提示窗口

selenium - 位于 selenium 2.0 中检查 DOM 上元素是否存在的元素可见性的替代方案?

python - python2 和 python3 之间的可移植元类

python - 正则表达式从Python文件中提取多行行

python - 将字符串列表编码为整数

python - 如何在 python selenium 中将文本框数据转换为整数

Python 进程不会在 GTK 循环退出时退出

javascript - 用于 JavaScript 的 Selenium Webdriver - 添加 'Sizzle' 策略

javascript - 在 then [protractor] 的参数中查找元素