首页 > 其他分享 >四、iframe切换+alert切换+鼠标操作+js操作

四、iframe切换+alert切换+鼠标操作+js操作

时间:2024-01-24 19:58:26浏览次数:34  
标签:driver element alert 切换 iframe js click

1、iframe切换

  iframe是什么

    在网页中内嵌了另一个html

  怎么识别iframe

    F12打开开发者工具,在Element面板中鼠标点击要操作的元素会显示元素的完整路径,检查里面是否存在iframe,html

  

  切换进iframe当中去

    driver.switch_to.frame(几种方法去定位iframe)

    1)id 或者 name 属性

    2)webelement对象  -- driver.find_element()

    3)iframe索引   -- 从0开始

  要从iframe当中直接返回默认html

    driver.switch_to.default_content()

  返回iframe的上一级

    driver.switch_to.parent_frame()

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")

# 找到iframe元素
ele = driver.find_element(By.XPATH, '//iframe[@class="QQMailSdkTool_login_loginBox_qq_iframe"]')
# 切换进入一级iframe
driver.switch_to.frame(ele)
# 再次切换进入二级iframe
driver.switch_to.frame('ptlogin_iframe')
# 在新的html当中找元素
driver.find_element(By.ID, 'switcher_plogin').click()

time.sleep(7)
driver.quit()

 

2、Alert切换

  用于处理js弹窗  

  Alert类 --目标就是关闭js弹窗

    accept()  确定

    dismiss()  取消

    send_keys()  输入

  切换alert:

    driver.switch_to.alert()

# 弹出js框
driver.find_element(By.XPATH, '//button[text()="试一试"]').click()
# 1、等一等
time.sleep(0.5)
# 2、切换到alert
alert = driver.switch_to.alert
# 3、关闭alert
alert.accept()

  

3、鼠标操作

  ActionChains类  -- 鼠标操作类

  第一个:鼠标的操作

    move_to_element()  悬浮

    pause()  动作与动作直接的停顿

    click()  点击

    context_click()  右击

    double_click()  双击

    scroll_to_element()  将元素滚动到可见区域,与底部对齐

  所有的鼠标操作方法,都返回了self

  链式调用:

    ActionChains(driver).click().move_to_element().double_click()

  第二个:执行动作

    perform()

  

  使用步骤:

    1)实例化ActionChains类

    2)调用鼠标操作方法

    3)调用perform()

# 1、实例化ActionChains类
ac = ActionChains(driver)

# 2、调用鼠标操作的方法 - 悬浮、点击、双击
ele = driver.find_element(By.XPATH, "//nav//span[contains(text(),'测试派')]")
ac.move_to_element(ele).pause(0.5).click(ele).pause(0.5).double_click(ele)
# 调用perform()
ac.perform()

4、元素找不到有那些情况

  noSuchElement

  1)检查元素表达式  -- 在运行报错的页面检查一下

  2)有可能元素还没有出现  --添加等待

  3)是否在iframe中,是否在新窗口中

 

5、js操作-点击操作

  selenium中执行js代码的方法

    driver.execute_script(js代码, 传递给js代码的参数)

  js代码如何接收外部参数

    arguments

ele = driver.find_element(By.XPATH, '//button[contains(@class,"el-button--primary")]')
# js代码
js_code = 'arguments[0].click();'
# 执行js代码,并将元素对象传递给js
driver.execute_script(js_code, ele)

  

 

标签:driver,element,alert,切换,iframe,js,click
From: https://www.cnblogs.com/qashan/p/17985728

相关文章

  • js如何数组去重
    在JavaScript中,有多种方法可以实现数组去重。下面是一些常见的数组去重方法:使用Set数据结构:Set数据结构存储唯一的值,可以利用它的特性来去除数组中的重复元素。constarr=[10,20,30,40,50,50];constuniqueArr=[...newSet(arr)];console.log(uniqueArr......
  • linux 安装多版本java,并可切换版本
    我多版本切换,省事操作。配置:/etc/profileexportJAVA_HOME=/usr/java/jdk/jdk1.8.0_201exportJRE_HOME=/usr/java/jdk/jdk1.8.0_201/jreexportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH#切换1.8......
  • vue3中使用animate.css+wow.js
    官网链接:animatewow.js版本声明:"dependencies":{"vue":"^3.3.11","animate.css":"^4.1.1","wow.js":"^1.2.2"},1.安装:npminstallanimate.css--savenpminstallwow.js......
  • sortable.js el-table 树形表 拖拽
    实现的功能:该树形表只有一级子节点该子节点只能在当前父节点中拖拽,不能跨父节点拖拽同时只能展开一个父节点,其他父节点闭合实现的关键点:mounted挂载初始化sortable拖拽完onEnd方法返回的index是整个列表的排序,要扁平化数组调用该方法getTable()后台多返回一个kid,......
  • 用 UNPKG/CDNJS 国内镜像优化网页加载速度
    unpkg.com和cdnjs.cloudflare.com这两个官方域名的加载速度实在令人汗颜。抽了一下午找了些国内能用的高速稳定镜像,批量更换一下就能加速访问了。unpkg用Zstatic的镜像,把原来的unpkg.com换成s4.zstatic.net/npmcdnjs用360或者Zstatic的镜像,把原来的cdnjs.cloudfl......
  • JS中的扩展运算符(...)和剩余运算符(...)
    一、概念在JS中,扩展运算符(spread)是三个点 (...) ,剩余运算符(rest)也是三个点 (...)二、扩展运算符(1)基本使用:扩展运算符的主要作用是将一个数组转为用逗号分隔的参数序列,它好比rest的逆运算//传递数据代替多个字符串的形式functiontest(a,b,c){console.log(a);//1......
  • JS复制JPG图片到剪切板
    HTML代码:<buttonid="button"type="primary"class="ui-button">复制JPG图片</button><imgid="image"width="150"src="./mybook.jpg">JS代码:constdoCopyImg2Clipboard=async(image,suc......
  • PgSql 行转列的使用 jsonb_each与row_to_json
    PgSql行转列的使用jsonb_each与row_to_json1:正常的几行数据2:转换后3:code(以commodity来分组)select"Id","JabilPn","Brand","PricelnUsd","Commodity"from"Eme_Materials"emwhere"Id"<=3s......
  • idea中启动web、jsp项目
    1.idea打开项目选择要打开的项目的根目录2.项目配置配置jdkmodules配置添加web添加依赖删除爆红的依赖添加依赖目录或者jar配置web.xml配置lib如果没有生成则添加项目所需依赖facets配置和web配置一样配置artifacts3.配置tomcat......
  • js/ts中Date类的ref响应式 -- VUE3
    现象:Date对象无法响应式原因:Date是个深层对象,外面那层可以响应,但是更改里面的层,则不会被侦测到改动解决:强制触发副作用即可参考文档:https://cn.vuejs.org/api/reactivity-advanced.html#triggerref<template><divclass="cnblogs_yucloud">{{DateTime}}</div>......