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

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

7
爬虫失败?很可能是因为这个问题!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多个网站爬取经验

免费开始 →

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

继续阅读

Get notified of new posts

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

Your email will only be used for new post notifications.