selenium常用API介绍

2023-05-16

selenium常用API介绍

文本的清空与提交

br.find_element_by_id("xxx").clear()#清空文本
br.find_element_by_id("xxx").submit()#提交,当然也可以点击提交按钮提交

退出游览器

br.close()#关闭当前选项卡
br.quit()#退出整个游览器

获取页面标题和当前页面源码

#这两个都是属性
br.title
br.page_source

游览器窗口最大化

br.maximize_window()

刷新页面

br.refresh()

前进后退

br.back()
br.forward()

多窗口切换

1.通过循环切换

from selenium import webdriver
br = webdriver.Firefox()
br.get("https://www.baidu.com")
h = br.current_window_handle	#获取当前窗口句柄
for i in br.window_handles:
    if h!= i:
        br.switch_to.window(i)	#如果不是当前窗口,那么将焦点切换到新的窗口
...这里是切换窗口后在新窗口中做的操作
br.switch_to.window(h)	#切回原来的窗口
...

2.通过窗口句柄编号切换

from selenium import webdriver
br = webdriver.Firefox()
br.get("https://www.baidu.com")
h = br.window_handles[0]
new = br.window_handles[1]
br.switch_to.window(new)	#切换到新窗口
...操作新窗口
br.switch_to.window(h)		#切回到原窗口
...
#注意:window_handles返回的是一个窗口句柄的列表,这些窗口句柄都有它所对应的索引号(编号)
#第一个打开的窗口的索引号是0,最后一个打开的窗口的索引号是1,倒数第二个是2,倒数第三个是3
#依次类推
# 0 1
# 0 2 1
# 0 3 2 1
# ……

操作frame/iframe框架里面的元素

#要操作框架里的元素,需要首先切到框架所在的页面
#通过框架的id或name切换
br.switch_to.frame("if")	#这里id属性值为if
br.switch_to.frame("nf")	#这里name属性值为nf
#还可以使用xpath,css定位
e=br.find_element_by_xpath("//*[@id='if']")
br.switch_to.frame(e)

切出frame/iframe框架

br.switch_to.default_content()

复选框操作

  • 通过常用元素定位方式定位复选框元素,然后加click()操作

    from selenium import webdriver
    br = webdriver.Firefox()	#获取游览器对象
    #定位复选框元素并单击
    br.find_element_by_id("xxx").click()	#通过ID定位元素单击
    br.find_element_by_tag_name("input").click()	#通过标签名定位元素单击
    br.find_elements_by_tag_name("input")[0].click()#通过定位的元素数组单击
    br.find_elements_by_tag_name("input").pop().click()#通过pop()获得数组最后一个元素单击
    
  • 通过元素的type属性值判断是否为复选框

    from selenium import webdriver
    br = webdriver.Firefox()
    es = br.find_elements_by_tag_name("input")#获取所有标签名为input的元素
    for i in es:
        #checkbox表示复选框,radio表示单选框
        if i.get_attribute("type")=="checkbox":
            i.click()
    

下拉框操作

使用Select类判断元素是否为下拉框,如果是,那么返回一个下拉框对象,如果不是,那么抛出异常

from selenium import webdriver
br = webdriver.Firefox()
s = Select(br.find_element_by_id("xxx"))#判断元素是否为下拉框
s.select_by_value("x")	#1.通过value值定位下拉框中某一个选项
s.select_by_visible_text("x")	#2.通过文本值定位下拉框中某一个选项
s.select_by_index(0)	#3.通过下拉框中选项的索引值定位
s.options	#获取到下拉框中所有的选项
for i in s.options:	#通过循环获取每一个选项
    i.click()

js弹窗处理

br.switch_to_alert.accept()#接受弹窗,表示点击弹窗上的确定按钮
br.switch_to_alert.dismiss()#取消弹窗,表示点击弹窗上的取消按钮
br.switch_to_alert.text	#获取弹窗上的文本

js代码调用

js1 = "window.scrollTo(100,200);"	#编写js代码
js2 = "window.open('https://www.baidu.com')"
br.excute_script(js1)	#执行js代码
br.excute_script(js2)

鼠标事件

使用ActionChains类

from selenium import webdriver
from selenium.webdriver import ActionChains
br = webdriver.Firefox()
#perform()执行所有存储在ActionChains()类中的行为,做最终的提交
#鼠标悬停操作
ActionChains(br).move_to_element(br.find_element_by_id("xxx")).perform()
#鼠标双击操作
ActionChains(br).double_click(br.find_element_by_id("xxx")).perform()
#鼠标右击操作
ActionChains(br).context_click(br.find_element_by_id("xxx")).perform()

键盘操作

#send_keys()
e = br.find_element_by_id("input")
e.send_keys("xxx")	#向文本框输入

使用Keys类,发送组合键盘按键

#需要先导入Keys类
from selenium.webdriver.common.keys import Keys
e = br.find_element_by_id("input")
e.send_keys(Keys.BACK_SPACE)	#回退一格
e.send_keys(Keys.CONTROL,'a')	#输入"control+a"即为全选
e.send_keys(Keys.CONTROL,'c')	#输入"control+c"即为复制
e.send_keys(Keys.CONTROL,'v')	#输入"control+v"即为粘贴
e.send_keys(Keys.CONTROL,'x')	#输入"control+x"即为剪切

窗口截图

也就是网页截图

br.get_screenshot_as _file(r"D:\xxx\xxx\xxx.png")
#将截图保存在目标路径下

验证码处理

#9 验证码处理
# 常见的验证码处理方法:
# 1)去掉验证码
# 2)设置万能验证码
# 3)验证码识别技术
# 4)手工输入
#5)cookie:无效,因为cookie值会变,Seleniuim提供了get_cookie()来获取某个cookie值

#模拟万能验证码
 from random import randint
 #生成一个4位的随机数(模拟验证码的生成)
 n=randint(1000,9999)
 print(n)
 #模拟用户输入验证码
 num=int(input("请输入验证码:"))
 print(num)

 #模拟验证码的匹配:
 if num==n:#模拟验证码输入更生成的匹配
     print("认证成功")
 elif num==1357:#莫i用户输入的是万能验证码
     print("认证成功")
 else:
     print("认证失败")

Selenium脚本中可能出现的3种等待方法

为什么需要设置元素等待?

在我们做网页元素定位的时候,有可能出现网页打开了但是元素还没加载好,这个时候就定位不到元素,就会报错。为了避免这种情况,我们需要添加等待。

等待的分类

强制等待

sleep():sleep()可用于避免因为元素未加载而定位失败的情况,但是,如果指定的时间过长,即使元素加载好了,还是会继续等待,这样会浪费很多时间。在脚本调试过程中,sleep()用得比较多。

eg:sleep(10) 强制休眠10秒钟

隐式等待

implicitly_wait():隐式等待只需要声明一次,一般在打开浏览器后进行声明,声明之后对整个浏览器对象的声明周期都有效,后面不用再重复声明。隐式等待存在一个问题,就是程序会一直等待整个页面加载完成才会执行下一步,有时候想要定位的元素早就加载完成了,但是因为别的元素还没有,仍得到页面全部完成才执行下一步。

eg:implicitly_wait(10) 最多等10秒,抛出找不到元素的异常

显式等待

WebDriverWait():相比于隐式等待,显式等待只针对指定的元素生效,不再是针对所有的页面元素。可以根据需要定位的元素来设置显式等待,无需等待页面完全加载,从而可以节省因加载无关紧要的页面元素而浪费的时间。

eg:WebDriverWait(br,10,0.5).until():最多等10秒,如果超过10秒,抛出超时异常

from selenium import webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

br = webdriver.Firefox()
br.get("https://www.baidu.com")
#等待br,最多等待10秒,每0.5秒查看id属性为kw的元素是否加载完毕,如果加载完,那么结束等待,否则每隔0.5秒查看一次并等待
e = WebDriverWait(br,10,0.5).until(expected_conditions.presence_of_element_located((By.ID,'kw')))
e.send_keys('aaa')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium常用API介绍 的相关文章

随机推荐

  • LabVIEW类方法浏览器-Class Method Browser

    随着LabVIEW的类编程应用增多 xff0c 当打开较多的VI进行编辑时候 xff0c 添加该类对应的VI方法到程序后背板上操作显得繁琐 xff08 需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI xff0c 然后再拖
  • vue学习笔记—bootstrap+vue用户管理

    vue xff0c 读音view xff0c 简单易用的前端框架 特点如下 xff1a 1 一个mvvm的前端框架 xff0c 内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2 中国人尤雨溪维护的个人项目 xff0c
  • Mysql查询创建和导入操作

    如何安装 xff1a https www cnblogs com bigbrotherer p 7241845 html 登录 xff1a mysql uroot p 输入密码 xff1a xxxx 显示当前数据库 xff1a show d
  • Typescript日期Date如何做格式化字符串

    使用一个date fns format的库 安装npm i date fns save import format from 39 date fns format 39 const newdate 61 new Date console l
  • C#匿名类型和动态解析减少定义传输类模板

    C 作为强类型语言 xff0c 在序列化和反序列化 xff08 json xff09 场景中对字符串解析常常需要定义强类型模板 xff0c 造成编码上的繁琐 其实可以使用匿名类型和动态解析减少json序列化时候的数据模板定义 xff1b s
  • Sourcetree 克隆代码,将git@打头路径,写入URL显示无效路径的处理

    情景 xff1a 刚安装完sourceTree 点击 43 xff0c 进行Clone项目 xff0c 输入 git 64 195 178 10 181 datas sys git路径 xff0c 提示 无效路径 信息 处理方法 xff1a
  • docker安装samba,网络硬盘

    安装好docker之后可以安装 dperson samba 使用下面的语句 xff0c 创建默认的用户 docker run it name samba p 139 139 p 445 445 v home ftpserver smb mo
  • Linux下执行可执行文件提示:No such file or directory的解决方法

    最近在Linux下安装交叉编译链工具 xff0c 解压完成后执行却提示 xff1a No such file or directory 查了一下发现我是64位的Ubuntu系统但是执行的是32位程序 xff0c 缺少32位lib库所以无法执
  • C语言typeof详解

    typeof 是 GNU C 标准里特有的扩展 xff0c 标准的 ISO C 并没有这个关键字 xff0c 所以在编译的时候不能加任何 ISO 的 C 标准选项 xff0c 否则会报错 使用时加入 std 61 gnu90 即 GNU 的
  • S5PV210-uboot解析(二)-start.S解析

    start S解析 首先是头文件包含 include lt config h gt include lt version h gt if defined CONFIG ENABLE MMU include lt asm proc domai
  • MPV播放器快捷键

    MPV播放器快捷键 Location of user defined bindings config mpv input conf Lines starting with are comments Use SHARP to assign t
  • u-boot学习总结

    1 移植前准备 Ubuntu 配置ssh tftp nfs 烧写uboot前格式化SD卡 1 Unsupported SD reader 2 dev sdb is NOT identified Vmware出问题在控制面板 gt 程序和功能
  • setjmp和longjmp

    setjmp 和 longjmp 在C标准库 lt setjmp h gt 中 setjmp jmp buf j 必须首先被调用 它表示 使用变量 j 记录现在的位置 函数返回 0 longjmp jmp buf j int i 可以接着被
  • GNU C typeof

    typeof 是 GNU C 标准里特有的扩展 xff0c 标准的 ISO C 并没有这个关键字 xff0c 所以在编译的时候不能加任何 ISO 的 C 标准选项 xff0c 否则会报错 使用时加入 std 61 gnu90 即 GNU 的
  • linux内核常用宏container_of

    linux内核常用宏 container of 定义如下 xff1a linux 2 6 38 8 include linux kernel h container of cast a member of a structure out t
  • 【c语言】对结构体数组按照某项规则进行排序

    这是基于qsort 函数进行的简单排序 xff08 附带其他类型的数组使用qsort 进行的排序 xff09 目录 一 qsort 函数 二 compare 函数 1 结构体数组 1 xff09 升序实现 2 xff09 降序实现 2 整型
  • iOS TextFiled、TextView 关于键盘的收起以及处理键盘遮挡

    在iOS开发中 xff0c UITextFiled和UITextView是很常见的两个控件 xff0c 当我们设置好这两个控件后 xff0c 点击文字输入区域 xff0c 系统会自动弹出键盘 xff0c 但是如何收起键盘 点击哪里收起键盘
  • 【2023最新版】超详细Kali安装保姆级教程,Kali Linux环境配置和使用指南,看完这一篇就够了

    Kali 安装教程 第一步 xff1a 新建一台Debian虚拟机 1 xff09 选择客户机操作系统 2 xff09 设置虚拟机名称 存储位置 3 xff09 设置处理器 1颗1核心 设置内存2048MB 设置网络类型NAT 4 xff0
  • Mac Time Machine恢复系统 Time Machine还原系统教程

    Mac下的 Time Machine是一个OS X自带的非常强大的功能 xff0c 之前PC6小编有教大家如何设置 Time Machine的备份盘 xff0c 当我们的Mac系统崩溃时 xff0c 可以使用Time Machine来恢复系
  • selenium常用API介绍

    selenium常用API介绍 文本的清空与提交 br span class token punctuation span find element by id span class token punctuation span span