selenium常用的API操作

1.鼠标事件

鼠标事件调用了一个ActionChains的类,需要导包,并且常用的鼠标时间都是类里面的方法,所以需要实例化对象之后调用方法

from selenium.webdriver import ActionChains
action = ActionChains(driver)

鼠标事件包含的方法:

        双击: double_click(元素)

        右键点击:context_click(元素)

        鼠标悬停:move_to_element(元素)

        拖动:

                drag_and_drop(原始元素,目标元素)           将原始元素拖动到指定元素位置

                drag_and_drop_by_offset(原始元素,x,y)    将元素拖动到指定元素位置

        按住鼠标左键:click_and_hold(元素)

下图为以上所介绍的鼠标方法的应用(不包含拖动)

from selenium.webdriver import ActionChains
from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 双击元素
ele = driver.find_element_by_id("s-top-loginbtn")
ActionChains(driver).double_click(ele).perform()

# 右键点击元素
ele = driver.find_element_by_id("s-usersetting-top")
ActionChains(driver).context_click(ele).perform()

# 鼠标悬停
ele = driver.find_element_by_id("s-usersetting-top")
ActionChains(driver).move_to_element(ele).perform()

# 按下鼠标左键
ele = driver.find_element_by_id("kw")
ActionChains(driver).click_and_hold(ele)
time.sleep(5)
driver.quit()

下图为鼠标拖动的方法

from selenium.webdriver import ActionChains
from selenium import webdriver

driver = webdriver.Firefox()
driver.get(
    "file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/drop.html")
# 元素拖动到指定元素位置
div1 = driver.find_element_by_id("div1")
div2 = driver.find_element_by_id("div2")
# ActionChains(driver).drag_and_drop(div1,div2).perform()

# 拖动到指定像素点
ActionChains(driver).drag_and_drop_by_offset(div1, 600, 300).perform()

2.键盘事件

键盘事件同样需要导包

from selenium.webdriver.common.keys import Keys

键盘的使用必须与send_keys结合起来

        send_keys(keys.BACK_SPACE)                键盘键入删除键

        send_keys(keys.TAB)                                 键盘键入tab键

        send_keys(keys.ENTER)                            键盘键入回车键

下图代码为操作键盘事件

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('源码时代')
time.sleep(3)
# 键盘的使用必须和 send_keys 结合起来
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)
time.sleep(2)
# 键盘写入tab键
driver.find_element_by_id('kw').send_keys(Keys.TAB)
time.sleep(3)
# 键盘写入回车键
driver.find_element_by_id('kw').send_keys(Keys.ENTER)

3.下拉框选择

        3.1通过元素的基本操作,进行下拉框定位

                1.先定位下拉框,点击下拉出现选项

                2.定位选项,再选中选项

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
driver.get('file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8CA.html')
# 之前的方法
driver.find_element_by_id("selectA").click()
driver.find_element_by_css_selector('option[value="cq"]').click()

        3.2 通过Select类选择下拉框

                1.导包

                        from selenium.webdriver.support.select import Select

                2.常用方法

                通过value选择                                select.select_by_value(value值)

                通过索引选择 索引从0开始         select.select_by_index(索引值)

                通过元素文本选择                          select.select_by_visible_text(文本值)

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
driver.get(
    'file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8CA.html')
# 定位到下拉框元素
ele = driver.find_element_by_id("selectA")
# 实例化select对象
select = Select(ele)
time.sleep(3)
# 通过value选择
select.select_by_value("gz")
time.sleep(3)
# 通过索引选择
select.select_by_index(3)
time.sleep(3)
# 通过元素文本选择
select.select_by_visible_text("A北京")
time.sleep(3)
driver.quit()

4.滚动条处理

在webdriver中本身没有提供对滚动条的操作,但提供了一个执行js脚本的方法

因此,可以通过js脚本来执行滚动条的操作                

1.拖动滚动条

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8CA.html')
time.sleep(2)
# 准备js脚本  上下拖动改变y轴,左右拖动改变x轴
js = "window.scrollTo(0,1000)"
# 使用webdriver的driver.execute_script(js脚本)的方法执行js脚本,实现滚动条操作
driver.execute_script(js)

2.聚焦到某个元素

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(
    'file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8CA.html')
time.sleep(2)
# 准备需要聚焦到的元素
ele = driver.find_element_by_id("alerta")
# 准备js脚本聚焦到元素
js = "arguments[0].scrollIntoView();"
# 执行js脚本,聚焦到某元素
driver.execute_script(js, ele)

5.iframe操作

定义:

        iframe是前端最常用的标签,用于HTML的嵌套,会导致嵌套页面的元素能定位,但实际不在本页面

什么时候使用页面切换方法?

        1.当定位元素能定位,但在selenium里找不到元素时

        2.在F12 elements定位该元素,在下方绝对路径查看是否有iframe  frame等,存在则需要进行页面切换

页面切换的方法

        1.通过frame_name进行页面切换

        2.通过frame_id进行页面切换

        网页对象.switch_to.frame("frame_name/frame_id")

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
# 方法一  通过iframe的name值或id值切换到嵌套页面
driver.switch_to.frame("myframe1")
driver.find_element_by_id("userA").send_keys("adminA")

driver.switch_to.frame("idframe1")
driver.find_element_by_id("userA").send_keys("adminA")

        3.通过frame的索引进行切换,索引从0开始

        网页对象.switch_to.frame(索引值)

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
# # 方法二:索引切换
driver.switch_to.frame(0)
driver.find_element_by_id("userA").send_keys("adminA")

        3.通过元素定位进行切换

        网页对象.switch_to.frame(元素)

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
# 方法三:元素定位切换
ele = driver.find_element_by_css_selector('iframe[id="idframe1"]')
driver.switch_to.frame(ele)
driver.find_element_by_id("userA").send_keys("adminA")

退出嵌套页面的方法

        1.切换回默认页面,退出所有嵌套

                页面对象.switch_to.default_content

        2.切换回上级页面,只退出一层

                页面对象.switch_to.parent_frame()

iframe的常见应用场景

        1.登录界面'

        2.富文本编辑框

        3.后台菜单栏


6.多窗口切换

定义:

        多窗口切换:在超链接标签(a)里存在target=_blank,点击会打开一个新页面

        获取窗口句柄

                1.获取当前窗口句柄        

                        driver.current_window_handle

                2.获取所有窗口句柄,返回一个列表

                        driver.window_handles

                3.切换窗口

                        driver.switch_to.window(句柄)

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(
    "file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
time.sleep(2)
# 获取当前页面句柄
curr1 = driver.current_window_handle
print(curr1)
# 定位到新浪新闻并点击
driver.find_element_by_id("fw").click()
time.sleep(2)
# 获取所有页面句柄,返回一个列表
curr2 = driver.window_handles
print(curr2)
# 切换回原页面
driver.switch_to.window(curr1)
time.sleep(2)
# 根据索引切换至新浪页面
driver.switch_to.window(curr2[1])
time.sleep(2)
# 根据索引切换回原页面
driver.switch_to.window(curr2[0])
time.sleep(2)
# 关闭页面
driver.quit()

方法二:

        在js中可以选择去掉链接标签中的target标签,使链接点击后本页面打开,使用浏览器页面操作就可以切换页面

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(
    "file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
time.sleep(2)

# 准备js脚本,移除target属性
js = 'document.getElementById("fw").removeAttribute("target")'
# 执行脚本
driver.execute_script(js)
# 点击链接
time.sleep(2)
driver.find_element_by_id("fw").click()
time.sleep(2)
# 回退网页
driver.back()
time.sleep(2)
# 关闭网页
driver.quit()

7.弹窗处理

页面上的弹窗分为原生弹窗和自定义弹窗

为什么要关闭弹窗?

        

        1.原生弹窗:

                alert:只有一个确定按钮

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

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

        获取页面弹窗信息

my_alert = driver.switch_to.alert

         alert:只有一个确定按钮

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
time.sleep(2)
# 点击alert弹窗  有一个确定按钮
driver.find_element_by_id("alert").click()
time.sleep(3)
# 获取弹窗信息
my_alert = driver.switch_to.alert
# 点击确定
my_alert.accept()

 

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

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
time.sleep(2)

# 点击confirm弹窗  有一个确认按钮,一个取消按钮
driver.find_element_by_id("confirm").click()
time.sleep(3)
# 获取页面弹窗信息
my_confirm = driver.switch_to.alert
# 点击确定
my_confirm.accept()
time.sleep(3)
# 再点击confirm弹窗
driver.find_element_by_id("confirm").click()
time.sleep(3)
# 点击取消
my_confirm.dismiss()
time.sleep(3)

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

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
time.sleep(2)
# 点击prompt弹窗  有一个输入框,一个确认按钮,一个取消按钮
driver.find_element_by_id("prompt").click()
time.sleep(3)
# 获取页面弹窗信息
my_prompt = driver.switch_to.alert
# 点击确定
my_prompt.send_keys('123456')
time.sleep(5)
my_prompt.accept()
time.sleep(3)
# 再点击confirm弹窗
driver.find_element_by_id("prompt").click()
time.sleep(3)
# 获取页面弹窗信息
my_prompt = driver.switch_to.alert
#点击取消
my_prompt.dismiss()
time.sleep(3)

自定义弹窗  通过js脚本去除

自定义弹窗没有提供好的方法去除,但可以通过执行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.Firefox()
driver.get("https://www.itsource.cn/")
time.sleep(3)
# 准备js脚本,设置显示为空
js = 'document.getElementById("iframe_company_mini_div").style.display="none"'
# 执行脚本取消弹窗
driver.execute_script(js)

8.单选框和复选框

使用        元素.is_selected()        判断元素是否被选中

单选框 在html代码中,type是radio,并且一组单元name值全部一样

下图为示例代码:

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(
    "file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
time.sleep(2)
# 定位到单选框
xg = driver.find_element_by_id("xg")
# 判断是否被选中,如果没被选中,则点击选择
if not xg.is_selected():
    xg.click()
time.sleep(3)
# 定位到另一个单选框,判断是否被选中
if not driver.find_element_by_id("pg").is_selected():
    driver.find_element_by_id("pg").click()
time.sleep(3)
driver.quit()

多选框 

在html代码中,type是checkbox,name值相同

全选:

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(
    "file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
time.sleep(2)
# 获取所有元素
eles = driver.find_elements_by_name("checkbox")
# 全选
for ele in eles:
    if not ele.is_selected():
        ele.click()

多选:

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(
    "file:///E:/%E6%BA%90%E7%A0%81%E6%97%B6%E4%BB%A3/%E6%B5%8B%E8%AF%95/%E8%AF%BE%E4%BB%B6/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
time.sleep(2)
# 获取所有元素
eles = driver.find_elements_by_name("checkbox")
# 选择部分元素
option = ("购物", "旅游")
# 判断元素的value在不在option里
for ele in eles:
    if ele.get_attribute("value") in option:
        # 判断多选框有没有被选择
        if not ele.is_selected():
            ele.click()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值