元素找不到可能的原因:

  • 元素定位的表达式不对
  • 没有设置等待,或者设置等待时间太少
  • 根本不在这个页面(另外一个窗口,在一个iframe当中)

最好不要用的值定位元素:

  • 属性值中有数字,数字可能会变化
  • 不认识的莫名其妙的字符串(加密),也有可能动态生成
  • class里面的active hidden

1.窗口切换

窗口切换后要注意设置时间等待,否则会报错

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as whenclass TestDeom:def test_01(self):with webdriver.Chrome() as browser:browser.get('http://baidu.com/')# browser.implicitly_wait(5)el = browser.find_element(By.XPATH, '//input[@id="kw"]')el.send_keys('柠檬班')search_button = browser.find_element(By.ID, 'su')search_button.click()# 设置显性等级# 1.等待器,设置倒计时# 2.等待条件出现# 3.在超时前,如果等待条件出现了,如果等待条件没有出现,会报超时错误wait = WebDriverWait(browser, timeout=10)# 注意等待某个元素是传入元组或列表condition = when.element_to_be_clickable((By.LINK_TEXT, 'lemon.ke.qq.com/'))lemon_link = wait.until(condition)# 打印切换窗口前的第一个窗口print(browser.current_window_handle)lemon_link.click()# 打印所有窗口print(browser.window_handles)# 切换到新页面,因为是列表,所以要选择最后一个browser.switch_to.window(browser.window_handles[-1])print(browser.current_window_handle)browser.find_element(By.CSS_SELECTOR, '.agency-content')

运行结果:

2.iframe切换

例子一:

新建一个html文件,代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>py44</title>
</head>
<body>
<!--    标题--><h2 id="hello">hello</h2><iframe id="i" name="f" src="http://testingpai.com" width="800px" height="600px"></iframe>
</form>
</body>
</html>

然后找到本地编写html文件的路径,来访问

iframe切换代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as whenclass TestDeom:def test_01(self):with webdriver.Chrome() as browser:browser.implicitly_wait(5)browser.get('file:///E:/lemon/lianxi/day33_selenuim/iframe.html')browser.find_element(By.ID, 'hello')iframe = browser.find_element(By.ID, 'i')browser.switch_to.frame(iframe)browser.find_element(By.XPATH, '//span[contains(text(),"排行榜")]')

运行结果:

例子二:

还有一种定位元素的方式:#login_container>iframe,先定位到父级,再用>连接定位子级

代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import Byclass TestDeom:def test_01(self):with webdriver.Chrome() as browser:browser.implicitly_wait(5)browser.get('https://v4.ketangpai.com/Home/User/login.html')browser.find_element(By.LINK_TEXT, '微信登录').click()iframe = browser.find_element(By.CSS_SELECTOR, '#login_container>iframe')# iframe = browser.find_element(By.XPATH, '//iframe')browser.switch_to.frame(iframe)qrcode = browser.find_element(By.CSS_SELECTOR, '.qrcode')print(f'微信二维码:{qrcode.get_attribute("src")}')

运行结果:

总结:

切换到子页面

iframe = browser.find_element(元素表达式)
browser.switch_to.frame(iframe)

切换到子页面的子页面

sub_iframe = browser.find_element(元素表达式)
browser.switch_to.frame(sub_iframe)

切换到父级页面

browser.switch_to.parent_frame()

切换到主页面

browser.switch_to.default_content()

3.alert切换

出现alert弹框后,再去定位主页面的元素就不管用了,所以我们要切换到alert当中,点击确定回到主页面,这样就可以定位主页面的元素了

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>py44</title>
</head>
<body>
<!--    标题--><h2 id="hello" onclick="alert('are you ok?')">hello</h2>
</body>
</html>

from selenium.webdriver import Chromeclass TestAlert:def testalert(self):url = 'E:\lemon\lianxi\day33_selenuim\iframe.html'with Chrome() as browser:browser.get(url)browser.find_element('id', 'hello').click()# 注意alert是个属性,不是方法,后面没有括号browser.switch_to.alert.accept()browser.find_element('id', 'hello')

运行结果:

还有一种弹框跟alert相似,但实现方式不是原生的alert,可以直接进行元素定位

实现弹框的方式:

  • 原生的alert,prompt,样式很丑,所以现在用的少
  • 框架vue.js实现了ui效果,弹框就是普通的元素

web页面-页面操作-窗口/iframe/alert切换相关推荐

  1. python selenium元素定位、alert操作、iframe切换、多窗口切换、键盘操作、鼠标操作、js操作、操作本地文件、css高级操作

    用了那么久的selenium,整理一篇自己经常用到的标签和方法 本文档持续更新优化,喜欢的小伙伴可以点赞收藏一下 文章目录 1. 通用元素定位方法,需要引入By. 2. 通用多个元素查找By 3. c ...

  2. js利用tab键切换当前页面_JavaScript跳转到指定页面并且到指定的tab切换窗口

    JavaScript跳转到指定页面并且到指定的tab切换窗口 案例的解析就是点击A页面的第一个的切换窗口的按钮跳转到B页面,再点击B页面的按钮跳转到A页面的第二个窗口,这个实现的效果有三种方法,下面的 ...

  3. js对iframe内外(父子)页面进行操作

    怎么对iframe进行操作,1.在iframe里面控制iframe外面的js代码.2.在父框架对子iframe进行操作. 获取iframe里的内容 主要的两个API就是contentWindow,和c ...

  4. java 新窗口跳转页面_Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开...

    最近学习Java web,在学习过程中想实现一个需求,就是在jsp页面跳转的时候,希望跳转后的新页面在新窗口中打开, 而不是覆盖原来的页面,这个需求使我困惑了好长时间,后来通过大海捞针似的在网上寻找方 ...

  5. 简述php和web交互过程,PHP与Web页面交互操作实例分析

    PHP与Web页面交互操作实例分析,表单,数组,参数,字符串,属性 PHP与Web页面交互操作实例分析 易采站长站,站长之家为您整理了PHP与Web页面交互操作实例分析的相关内容. 本文实例讲述了PH ...

  6. html 在框架里弹出页面,iframe弹出新窗口 iframe页面打开新窗口问题

    如何使iframe中的链接都在新窗口打开 a.html文件源码如下 如何让所有链接在新窗口打开2008-07-24 21:26 使用target="blank"属性 open 注意 ...

  7. 点击div外区域隐藏div操作(嵌套iframe页面)

    一.正常页面 $(document).click(function(){$(dom).hide();//要隐藏的div}); 这个是最基础的原型,如果是有弹窗和遮罩层的,点击遮罩层的部分关闭弹窗和遮罩 ...

  8. selenium关闭浏览器当前页面后,切换到最后一个页面继续操作

    问题: 有时候用selenium操作浏览器,打开多个页面后,在不用的时候,需要关掉,切换页面需要切换句柄,关掉页面后,也需要重新切换句柄,否则页面接着操作元素会出问题 解决方法: import tim ...

  9. iframe 覆盖父页面_一次iframe子页面与父页面的通信

    事件回顾: 收到需求,说是要在别人的系统里嵌入目前由我维护的系统,嵌入的逻辑不多,只有一个创建流程. 刚开始觉得没什么,不就是你改改,我改改,你给我url加个参数,我知道是你调用,修改下页面balab ...

最新文章

  1. linux 树莓派查看ip,树莓派 常用Linux命令
  2. AWS S3 Windows系统下的文件夹上传基于python
  3. BZOJ 1305 [CQOI2009]dance跳舞
  4. Contoso 大学 - 3 - 排序、过滤及分页
  5. coin collector(一道测试题)
  6. JavaScript:获取帧率FrameUtil.js
  7. 通过修改控制文件scn推进数据库scn
  8. qt制作串口调试工具
  9. 电子设备常见的音视频接口
  10. 电脑无法启动显示计算机comt,电脑开机显示press any key to restart进不了系统怎么办?...
  11. 怎么用简单的方法压缩手机图片
  12. java-assured_rest-assured之获取响应数据(Getting Response Data)
  13. Android Compose——一个简单的Bilibili APP
  14. MP | 东农吴凤芝/南农韦中-根系分泌物介导的植物种间互作塑造了根际微生物组抑病力...
  15. Android项目架构图
  16. 千寻位置千寻知寸测试
  17. 假设检验中的P值 与显著性水平的联系
  18. Springboot 集成邮件服务 QQ企业邮箱
  19. 最长公共子序列、最长连续公共子序列、最长递增子序列
  20. django错误 - Reason given for failure: CSRF cookie..

热门文章

  1. class 提取谱线数据
  2. 如何在VC中使用7z SDK压缩文件
  3. WordPress主题制作全过程
  4. 聚类dbi指数_聚类算法评价指标——Davies-Bouldin指数(Dbi)
  5. vue+element,标题超出部分使用省略号表示
  6. 高中阶段学计算机,高中阶段计算机学习方法分享
  7. jxl.write.biff.RowsExceededException: The maximum number of rows permitted on a worksheet been exce
  8. WKWebView1 加载带图文富文本
  9. 学校数据填报系统,让数据统计工作更便捷_光点科技
  10. 百面机器学习学习笔记