我正在使用Python和BeautifulSoup4进行开发,需要获取页面上可见的链接。以下是给定的代码:
soup = BeautifulSoup(html)
links = soup('a')
我希望能创建一个名为 is_visible 的方法,用于检查页面上是否显示了链接。
使用Selenium的解决方案
因为我也在使用 Selenium,所以我知道以下解决方案:
from selenium.webdriver import Firefox
firefox = Firefox()
firefox.get('https://google.com')
links = firefox.find_elements_by_tag_name('a')
for link in links:
if link.is_displayed():
print('{} => Visible'.format(link.text))
else:
print('{} => Hidden'.format(link.text))
firefox.quit()
性能问题
不幸的是,is_displayed方法和获取文本属性会执行http请求以检索这些信息。因此,当页面上有许多链接或需要多次执行此操作时,情况可能变得非常缓慢。
另一方面,BeautifulSoup可以在获取页面源代码后立即执行这些解析操作,而且速度为零。但我无法想出如何做到这一点。
input
除外)隐藏。或者使用JS进行隐藏。然后你还有其他看不见的东西,比如白色背景上的白色文本。你到底想要检查什么?只是CSSdisplay:none
吗?那么你需要使用tinycss解析所有样式表,并查看规则是否与元素匹配。如果找到匹配项,请检查应用了哪些样式。困难在于层叠部分。此外,如果父元素被隐藏,则子元素也会被隐藏。因此,您必须检查该元素的所有父级是否也可见...或者只需坚持使用Selenium。 - allcaps