爬虫无法访问的元素时:访问iframe
在制作网络爬虫时,经常会遇到的一个问题是iframe。今天我们将了解iframe的概念、优缺点以及如何使用Selenium和Watir访问iframe内容。
iframe的概念
iframe是“内联框架”的缩写,用于在网页内包含另一个网页的HTML元素。换句话说,在一个网页内将另一个网页插入到一个小框架中显示,提供了网页内容的集成和互动功能,可用于各种用例。
iframe的使用情况
1) 将其他网站内容嵌入到我的网站中
- 网站使用iframe将YouTube视频、SlideShare幻灯片、Google地图或广告内容等插入到页面中,iframe可用于各种目的。当需要插入用户无需下载的PDF时,也可以使用iframe。
2) 将页面内部分区分为独立区域
- 当想要将网站的左侧作为菜单区域,右侧作为主要内容区域,或者将页面底部的广告部分分离时,也可以使用iframe。
3) 动态内容加载
- 可以通过iframe在当前页面内显示动态加载的内容或Web应用程序。这样可以实现网页之间的互动。
iframe的优缺点
1) 优点
在获取外部内容时非常方便
使用iframe可以轻松地将其他网站的内容嵌入到当前页面中,有助于整合显示其他服务的内容。
可以使用以下简单代码轻松插入地图。 (来源:mdn web docs)
<iframe
id="inlineFrameExample"
title="Inline Frame Example"
width="300"
height="200"
src="https://www.openstreetmap.org/export/embed.html?bbox=-0.004017949104309083%2C51.47612752641776%2C0.00030577182769775396%2C51.478569861898606&layer=mapnik">
</iframe>
在多次使用相同内容时很方便
- 当需要在多个页面中多次使用相同内容时,可以使用iframe避免重复工作。
不会影响当前页面
- iframe内的内容与外部网页分离,独立运行,因此外部内容的更改不会影响当前页面。
2) 缺点
可能存在安全漏洞
- 使用iframe时,外部内容可能会在与内部页面相同的域和安全策略下运行,从而导致网站出现XSS(跨站脚本)等安全风险。
可能会导致可访问性问题
- iframe中的内容与原始文档分离,可能会导致可访问性问题,给使用屏幕阅读器等辅助技术的用户带来不便。
可能对SEO产生不利影响
以前搜索引擎无法获取iframe的内容,因此有人认为iframe对SEO不利。但现在很难说iframe本身对SEO有影响。
现在搜索引擎可以检测到iframe并将其视为其他网站的内容,因此iframe既不会对搜索引擎排名有帮助,也不会有害。
但是,为了在搜索结果中获得更高的排名,最好避免在主页中使用iframe。这是因为在主页上使用独特且有用的内容而不是外部内容对SEO有利。
可能难以调整大小
- 由于iframe的大小取决于原始内容的大小,可能会给响应式布局设计带来困难。
可能会降低用户体验
- iframe中的内容加载时,页面内容可能会停止或延迟,从而降低用户体验。
在Selenium中获取iframe内部信息的方法
通过以下步骤可以在Selenium中访问iframe。
1) 访问网页
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # 웹 드라이버 선택 (예: Chrome)
driver.get("URL_OF_YOUR_PAGE") # 접근할 웹 페이지의 URL 입력
2) 识别iframe元素
可以使用find_element方法找到iframe。可以使用iframe的id、name、索引等。
iframe_element = driver.find_element(By.ID, "iframe_id") # iframe의 id를 사용하여 찾는 예시
3) 切换到iframe内部
使用switch_to.frame()方法将上下文切换到iframe内部。
driver.switch_to.frame(iframe_element) # iframe 내부로 전환
4) 在iframe内部执行所需操作
driver.find_element(By.CLASS_NAME, "element_class") # iframe 안의 엘리먼트의 class로 찾는 예시
5) 完成操作后返回原始上下文
driver.switch_to.default_content() # 원래의 컨텍스트로 복귀
在Watir中获取iframe内部信息的方法
在Watir中,可以通过以下步骤访问iframe。
1) 访问网页
require 'watir'
browser = Watir::Browser.new :chrome # 브라우저 선택 (예: Chrome)
browser.goto 'URL_OF_YOUR_PAGE' # 접근할 웹 페이지의 URL 입력
2) 识别iframe元素
iframe_element = browser.iframe(id: 'iframe_id') # iframe의 id를 사용하여 찾는 예시
3) 在iframe内部执行所需操作
iframe.element(xpath: "//button[@class='CLASS_NAME']") # iframe 안의 엘리먼트를 class로 찾는 예시
结语
在制作网络爬虫时,如果明明存在xpath却找不到元素的情况,大多数情况下该元素可能位于iframe中。因此,在进行爬取时,无法直接找到iframe内的元素,需要另外的访问方法。
今天我们了解了iframe的概念、优缺点,以及访问iframe时的方法。
前面提到的方法将有助于提高网络爬取能力并帮助收集各种数据。
数据收集,现在自动化
无需编码,5分钟即可开始 · 5000多个网站爬取经验




