Selenium中有哪些常见的API?如何在Selenium中进行基础的API操作?

一、什么是API操作?

Selenium 中的 API 是指应用程序编程接口,它是一组函数和方法,可以让你用不同的编程语言来控制和操作 Web 浏览器。

二、常见的API操作有哪些?该如何进行操作呢?

1、下拉单选择

#下拉框怎么操作?
#1、先定位下拉框,然后点击下拉出现选项
#2、定位对应的选项,点击选项选中
#3、通过Select定位
from selenium.webdriver.support.select import Select
Select(定位元素).select_by_value(value值)
Select(定位元素).select_by_index(索引值)     从0开始
Select(定位元素).select_by_visible_text(文本值)

#示例代码:
from selenium import webdriver
import time
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('测试url')
ele = driver.find_element_by_id('selectA')
print(ele.get_attribute('outerHTML'))
#可以不用用select=Select(ele)实例化直接调用
# 通过索引值进行定位
Select(ele).select_by_index(1)
time.sleep(2)
# 通过value值来选择下拉选项
Select(ele).select_by_value('gz')
time.sleep(2)
# 通过文本值进行定位
Select(ele).select_by_visible_text('A重庆')
time.sleep(2)
driver.quit()


driver = webdriver.Chrome()
driver.get('测试url')
ele = driver.find_element_by_id('selectA')
print(ele.get_attribute('outerHTML'))
#实例化
select=Select(ele)
# 通过索引值进行定位
select.select_by_index(1)
time.sleep(2)
# 通过value值来选择下拉选项
select.select_by_value('gz')
time.sleep(2)
# 通过文本值进行定位
select.select_by_visible_text('A重庆')
time.sleep(2)
driver.quit()

推荐阅读:如何定位下拉框?

2、滚动条处理

在webdriver里面本身没有提供对滚动条的操作,但是提供了一个执行js脚本的方法 因此可以通过js脚本来执行滚动条上下滑动

#1、准备js脚本
js=window.scrollTo(x,y)    #左右滑动改变x轴,上下滑动改变y轴
#2、使用webdriver的execute_script(js脚本)的方法执行js脚本实现滚动条操作
driver.execute_script(js)
#3、聚焦到某个元素位置:
#1.定位需要聚焦的元素
ele = driver.find_element_by_id('alerta')
#2.聚焦元素的js脚本
js = 'arguments[0].scrollIntoView()'
#3.执行脚本传入元素
driver.execute_script(js,ele)

#示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('测试url')
#滑动滚动条
js = 'window.scrollTo(0,1000)'    
time.sleep(3)
driver.execute_script(js)

# 聚焦到某个元素
# 定位需要聚焦的元素
ele = driver.find_element_by_id('alerta')
# 聚焦元素的js脚本
js = 'arguments[0].scrollIntoView();'
# 执行脚本传入元素
driver.execute_script(js,ele)

3、iframe操作

        iframe是什么? iframe是前端常用的一个标签,用于HTML页面的嵌套 会导致嵌套的页面元素能定位,但是实际上元素不在本页面。

        想要定位到iframe里面的元素,需要进行页面的切换,什么时候去使用切换的方法?

         1.当你定位元素能够定位但是在selenium里面找不到元素的时候去判断是否因为 iframe嵌套引起;

         2.在F12 elements里面定位该元素,然后在下方绝对路径里面查看是否有 iframe frame 存在则需要进行页面的切换才能操作。

#怎么进行页面切换:
对象.switch_to.frame(name值或者id值)
对象.switch_to.frame(索引值)     索引从0开始
对象.switch_to.frame(定位的元素)
#退出嵌套页面
#1.退出所有的嵌套页面
对象.switch_to.default_content()
#2.只退出一层嵌套
对象.switch_to.parent_frame()

#示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('测试url')
#定位iframe元素
ele2=driver.find_element_by_css_selector('iframe[id="idframe1"]')
#切换iframe
driver.switch_to.frame(ele2)

        iframe场景的应用场景:
        1.登录
        2.富文本编辑框
        3.后台的菜单栏

4、多窗口切换

获取窗口句柄
对象.current_window_handle  获取当前页面(原页面)的句柄
对象.window_handles         获取所有页面的句柄,返回一个列表
切换窗口
对象.switch_to.window(句柄)

#在超链接标签(a)里面存在 target=_blank 的时候点击会打开一个新的页面
#通过js脚本移除target属性
js = 'document.getElementById("fw").removeAttribute("target")'
对象.execute_script(js)

#示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('测试url')
# 获取当前句柄
current_handle = driver.current_window_handle
print(current_handle)
time.sleep(2)
driver.find_element_by_id("fw").click()
time.sleep(2)
# 当前句柄---原窗口句柄
print(driver.current_window_handle)
# 获取所有的页面句柄
print(driver.window_handles)
time.sleep(3)
# 切换回原页面
driver.switch_to.window(current_handle)
time.sleep(3)
# 通过索引获取句柄切换到新页面
driver.switch_to.window(driver.window_handles[1])

# 准备js脚本
js = 'document.getElementById("fw").removeAttribute("target")'
# 执行js脚本去掉target属性
driver.execute_script(js)
driver.find_element_by_id('fw').click()
time.sleep(3)
# 回到原页面
driver.back()

5、弹窗处理

为什么要取消弹窗?

        因为存在弹窗之后页面的元素无法操作

原生弹窗:

         alert:只有一个确定按钮 c

        onfirm:有一个确定按钮,一个取消按钮

         prompt:有一个输入框,一个确定按钮,一个取消按钮

#alert:
变量 = driver.switch_to.alert
变量.accept()
#confirm:
变量 = driver.switch_to.alert
变量.accept()     #点击确定
变量.dismiss()    #点击取消
#prompt:
变量 = driver.switch_to.alert
变量.accept()     #点击确定
变量.dismiss()    #点击取消
变量.send_keys(内容)    #输入内容
#都可以使用:变量.text  获取弹窗的文字信息
#示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('测试url')
time.sleep(2)
driver.find_element_by_id('alert').click()
time.sleep(2)
my_alert=driver.switch_to.alert
my_alert.accept()
time.sleep(2)
driver.find_element_by_id('confirm').click()
my_confirm=driver.switch_to.alert
my_confirm.accept()
time.sleep(2)
driver.find_element_by_id('confirm').click()
my_confirm.dismiss()
time.sleep(2)
driver.find_element_by_id('prompt').click()
my_prompt=driver.switch_to.alert
my_prompt.send_keys('12345')
time.sleep(2)
driver.quit()

自定义的弹窗:
        没有提供的方法去去除,可以通过执行js脚本来去除自定义的弹窗

#js脚本,把显示属性设置为空
js = 'document.getElementById("iframe_company_mini_div").style.display ="none"'
#执行js脚本
driver.execute_script(js)
#示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.itsource.cn/?source=baidu&sdclkid=AL2s15fGxrDib5jpbsq&bd_vid=9781189080447246926")
time.sleep(1)
# js脚本,把显示属性设置为空
js = 'document.getElementById("iframe_company_mini_div").style.display ="none"'
# 执行js脚本
driver.execute_script(js)
time.sleep(2)
driver.quit()

6、单选框

        在html代码里面 type是 radio 并且一组的单元 name属性值全部一样

元素.is_selected()    #判断元素是否选中
#示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('测试url')
time.sleep(2)
li=driver.find_element_by_id('li').click()
driver.find_element_by_id('jz').click()
if li.is_selected():
    pass
else:
    li.click()
time.sleep(2)
driver.quit()

7、多选框

        多选框是html代码里面 type属性是 checkbox,name属性相同

        

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('测试url')
time.sleep(2)
# 全选
# 获取所有的元素,
eles = driver.find_elements_by_name('checkbox')
print(eles)
# 遍历全部选中
for ele in eles:
    if not ele.is_selected():
        ele.click()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值