首页 > 其他分享 >selenium 无法定位元素的一种情形 - iframe

selenium 无法定位元素的一种情形 - iframe

时间:2023-08-05 18:57:47浏览次数:43  
标签:定位 driver frame selenium html iframe 页面

今天在爬取一个反爬措施较严格的网站时,使用 selenium 做自动化登录时,无法定位输入框的问题。
查看网页源代码确实没有登录相关元素的标签,可以判定是采用的动态加载,但是即使使用的动态加载,等待页面渲染完毕之后应该还是能定位的。

看了下渲染完毕之后的网页源码,发现了在当前 html 页面中,又嵌套了一份 html 页面:

到这里,初步的猜想就是原来这里的登录页面是通过 iframe 嵌套在当前页面中的一个子页面。顺着这个思路,去百度了一下,果然,frame 标签包含 frameset、frame、iframe 三种:

  • frameset 和普通的标签一样,不会影响正常的定位
  • 而 iframe 和 frame 称之为框架标签,允许 html 文档前嵌入另一个 html 文档

而 selenium 默认是拿到当前页面的主 iframe 的句柄的,如果需要对内嵌的子 html 页面模块进行定位,需要先将 selenium 的句柄切换到该 iframe(即子 html 页面)上。

旧版 selenium 使用如下语法进行切换:

driver = webdriver.Firefox()
driver.get(r'http://www.126.com/')
driver.switch_to_frame('x-URS-iframe')  # 先跳转到iframe框架(参数直接写 iframe 标签的 id 或者 name 属性即可)
input = driver.find_element_by_name('email')
username.clear()

新版 selenium 使用如下语法进行切换:

# 通过元素定位方式切换窗口
browser.switch_to.frame(browser.find_element(by=By.ID, value='contentIframe'))
 
# 通过索引方式切换
driver.switch_to.frame(2)	# 第二个iframe

最后,在切换到指定 iframe 中执行完相关操作后,不要忘了切换回主页面:

# 从子frame切回到父frame(相当于后退)
driver.switch_to.parent_frame()
 
# 直接从 frame 中切回主文档
driver.switch_to.default_content()

参考:

标签:定位,driver,frame,selenium,html,iframe,页面
From: https://www.cnblogs.com/zishu/p/17608400.html

相关文章

  • .NetCore + Selenium IIS 部署踩坑记
    一、问题   使用Selenium+chromedriver开发自动操作页面demo,本地调试使用IISExpress正常,部署到IIS访问接口代码正常执行,但是,但是页面并没有启动二、排查  网上找相似情况大概以下几种 1,chromedriver和chrome的版本不一致 2,IIS用户权限 3,代码写法问题 本......
  • 十步学习css定位知识
    十步学习css定位知识   http://www.barelyfitz.com/screencast/html-training/css/positioning/ 这个教程解释了css布局中的以下问题:position:static,position:relative,position:absolute,float 作......
  • 基于antd-input & tsx封装一个按固定位数、固定符号分隔内容的输入框
    /** *可在每四位字符间插入一个空格的输入框 */import{Input}from'antd';import{useEffect}from'react';constInputGap=(props:any)=>{ const{useGap,value,onChange}=props; //非onChange事件变更value useEffect(()=>{  value......
  • Nginx添加header防止网页被iframe
        页面给很多可恶的人调用己经不是什么怪事了,我们网站经常被人直接利用iframe调用了,后来找了一些方法防止页面给调用了。     下面主要说说几种防止被CrossFrame的方法: 可以使用php或nginx等添加X-Frame-Optionsheader来控制frame权限X-Frame-Options有三个可选......
  • TSINGSEE青犀视频安防监控EasyCVR视频汇聚平台电子地图定位偏移的排查与解决
    安防监控EasyCVR视频汇聚综合管理平台具有强大的数据接入、处理及分发能力,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、告警上报与查询、平台级联、云台控制、语音对讲、电子地图、轨迹跟踪、H.265自动转码等视频能力。在视频监控管理平台TSINGSEE青犀视频EasyCVR......
  • 应用案例|基于高精度3D视觉引导压缩机抓取定位应用
    Part.1 行业现状3D机器视觉是一种新兴的人工智能技术,它在机器视觉和机器学习领域中发挥着重要的作用。在工业领域,3D视觉技术被广泛应用于引导工业机器人进行抓取和定位操作。使用显扬科技的技术可以实现识别和定位压缩机。Part.2 如何识别和定位压缩机?首先,通过使用3D相机采集压缩......
  • 聊聊虚拟定位工具新宠儿:AnyGo的原理与识别
    背景:基于位置服务LBS「LocationBasedServices」的应用非常多,已经融入到生活中的方方面面。市面上已经有很多基于位置服务的应用场景,如运动品类应用基于地理位置生成运动轨迹,企业办公应用基于定位信息进行打卡,游戏品类应用基于位置信息开发区域排名,电商品类应用基于位置发放区域......
  • miniframe开源Web框架(适配Delphi、lazarus)
    miniframe开源Web框架,一个使用pascal脚本编写业务代码的服务端框架。框架已实现了HTTP服务、脚本解释执行、多种数据库连接、数据库缓冲池、连接缓冲池等底层支持。在此基础上使用者只需要关注自己的业务实现即可。源码及demo下载 编译及运行环境配置 github地址技术qun:821855479......
  • iframe 无法正确展示内容
    问题描述:在内嵌iframe使用预览服务无法正确展示内容,在新开页面使用预览服务无问题。问题分析:1、地址是否正确:iframe地址和新开页面一致:2、浏览器同源策略:iframe地址和父级窗口地址不同源。解决方案:配置预览服务代理。1、本地环境devServer:{ proxy:{  '/yl':......
  • 记录--五个有用的iframe踩坑问题,快收藏!
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 你不会还不知道iframe不能嵌入百度首页吧?为了丰富用户体验,我们常常会将其他网站的内容嵌入到自己的网页中。然而,随之而来的是一个常见的问题:Iframe嵌入网站无法正常使用。你是否也曾遇到过这个困扰,不知道该如......