selenium常用API介绍

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')
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值