爬虫失败?很可能是因为这个问题!iframe解决一切

當無法爬取特定元素時:請了解如何訪問iframe以及iframe的優缺點。同時探討使用Selenium和Watir訪問iframe內容的方法。

4,558
爬虫失败?很可能是因为这个问题!iframe解决一切
目录

爬虫无法访问的元素时:访问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多个网站爬取经验

免费开始 →

评论

发表评论

您的邮箱不会公开,仅用于回复通知。

继续阅读

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.