常用元素定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
s=Service(r'C:\Users\Administrator\Desktop\chromedriver.exe')
driver=webdriver.Chrome(service=s)# css定位
driver.find_element(By.CSS_SELECTOR,'[class~=article]')# class定位
driver.find_element(By.CLASS_NAME,'main-header-box')# id定位
driver.find_element(By.ID,'__nuxt')# name定位
driver.find_element(By.NAME,'theme-color')# Xptah 定位
driver.find_element(By.XPATH,'//*[@text="确定"]')# 超链接定位
driver.find_element(By.LINK_TEXT,'确认点击')# 超链接模糊定位
driver.find_element(By.PARTIAL_LINK_TEXT,'确认')
元素操作
- 点击元素:
element.click()- 示例:web.find_element(By.XPATH,'//*[@text="确定"]').click() - 清除文本框:
element.clear()- 示例:web.find_element(By.XPATH,'//*[@text="文本框"]').clear() - 在文本框内输入文本:
element.send_keys('要输入的文本')- 示例:web.find_element(By.XPATH,'//*[@text="文本框"]').send_keys("123456")- 关于文件上传: 碰见文件上传的控件,也可以使用send_keys()来进行文件上传,比如driver.find_element(By.CSS_SELECTOR,"[name='upfilea']").send_keys(r'C:\Users\Administrator\Desktop\chromedriver.exe') - 查看元素大小:
element.size- 示例:web.find_element(By.XPATH,'//*[@text="确定"]').size - 查看元素坐标:
element.location- 示例:web.find_element(By.XPATH,'//*[@text="确定"]').location - 获取元素指定属性:
element.get_attribute('属性名称')- 获取元素href的属性值示例:web.find_element(By.XPATH,'//*[@text="确定"]').get_attribute(href) - 查看元素是否可见(常用于判断输入框的提示,弹窗是否隐藏等情况):
element.is_displayed()- 示例:web.find_element(By.XPATH,'//*[@text="确定"]').is_displayed() - 查看元素是否可用(常用于判断未输入必要信息按钮置灰等情况):
element.is_enabled()- 示例:web.find_element(By.XPATH,'//*[@text="确定"]').is_enabled() - 查看元素是否可选中(用于检查复选框或单选按钮是否选中):
element.is_selected()- 示例:web.find_element(By.XPATH,'//*[@text="确定"]').is_selected()
浏览器界面常用操作
- 最大化浏览器:
driver.maximize_window() - 指定大小打开浏览器:
driver.web.set_window_size(800,800) - 将浏览器放置在指定位置:
driver.set_window_position(480,480) - 后退操作:
driver.back() - 前进操作:
driver.forward() - 刷新操作:
driver.refresh() - 关闭当前窗口:
driver.close() - 关闭浏览器驱动对象:
driver.quit() - 获取当前页面截图:
driver.get_screenshot_as_png()这里输出为byte类型,需要存储为图片格式 - 获取当前页面标题:
driver.title - 获取当前页面的链接地址:
driver.current_url - 获取当前页面的xml结构树:
driver.page_source
鼠标操作&键盘操作
鼠标操作
- 注意:所有操作需要先实例化鼠标对象,且所有操作都要使用perform函数进行执行,如下段代码所示
# 导包from selenium.webdriver import ActionChains
# 实例化对象
action=ActionChains(driver)# 通过链式调用来进行鼠标操作
action.move_to_element(element).perform()
- 右键操作:
action.double_click(element).perform()-解释:对element元素进行鼠标右键操作 - 双击操作:
action.context_click(element).perform()-解释:对element元素进行鼠标左键双击操作 - 悬停操作:
action.move_to_element(element).perform()-解释:将鼠标指针移动到element元素上面 - 元素拖动操作:
action.drag_and_drop(element1,element2).perform()-解释:从element1元素1的位置滑动到element2元素2的位置 - 坐标拖动操作:
action.drag_and_drop_by_offset(element1,x,y).perform()-解释:从element1元素1的位置滑动到x轴和y轴的位置
键盘操作
- 按下键位:
action.key_down(键值).perform()- 按下a键示例:action.key_down('a').perform() - 抬起键位:
action.key_up(键值).perform()- 抬起a键示例:action.key_down('a').perform() - 输入键值:
element.send_keys('键值')- 按下抬起空格键示例:driver.find_element(By.CSS_SELECTOR,"[name='t1']").send_keys(Keys.BACKSPACE)- 按下抬起A键示例:driver.find_element(By.CSS_SELECTOR,"[name='t1']").send_keys('a') - 输入组合键值:
element.send_keys('键值')- 按下抬起Ctrl+C键示例:driver.find_element(By.CSS_SELECTOR,"[name='t1']").send_keys(Keys.CONTROL,'c')
等待操作
隐式等待
解释:隐式等待是全局通用的等待,比如我们设置15秒的等待时间,假如在15秒内找到元素就会继续往下跑,假如15秒内没有找到则报错
示例:
driver.implicitly_wait(15)
显式等待
解释:相比隐式等待,显式等待只对指定元素生效,不再是在整个WebDriver生命周期内生效【仅对元素生效】
示例:
# 导包from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
s=Service(r'C:\Users\Administrator\Desktop\chromedriver.exe')
driver=webdriver.Chrome(service=s)
driver.maximize_window()
url='http://sahitest.com/demo/keypress.htm'
driver.get(url)# 进行封装,后续调用就不必重新再写一遍defFind_element(driver,feature,timeout=10,poll_frequency=0.5):"""
:param driver: driver
:param feature: 元素信息
:param timeout: 最长等待时间
:param poll_frequency: 元素查找的间隔时间
:return:
"""
feature_by, feature_value = feature
element = WebDriverWait(driver, timeout, poll_frequency).until(# 条件:直到元素加载完成lambda x:x.find_element(feature_by,feature_value))# 返回找到的元素return element
feature=By.CSS_SELECTOR,"[name='t1']"# 调用并输入文本
Find_element(driver,feature).send_keys(123123)
time.sleep(5)
driver.quit()
强制等待
解释:强制等待是一种固定的时间的等待,比如我们设置了15秒那么就会在15秒后代码才继续往下跑(需要导入time包)
示例:
time.sleep(15)
下拉框操作
前置操作:需要导入select包
from selenium.webdriver.support.select import Select
注意:下拉框元素选择一般为select标签
根据下拉框排序进行选择:
select.select_by_index(排序位置)
示例:
# 导包from selenium.webdriver.support.select import Select
element=driver.find_element(By.CSS_SELECTOR,'select')# 实例化Select
select=Select(element)# 选择下拉框的第2个选项
select.select_by_index(1)
根据下拉框文本进行选择:
select.select_by_visible_text(文本)
示例:
# 导包from selenium.webdriver.support.select import Select
element=driver.find_element(By.CSS_SELECTOR,'select')# 实例化Select
select=Select(element)# 选择下拉框的选择文本为上海的选项
select.select_by_visible_text("上海")
根据下拉框文本进行选择:
select.select_by_value(value属性的值)
示例:
# 导包from selenium.webdriver.support.select import Select
element=driver.find_element(By.CSS_SELECTOR,'select')# 实例化Select
select=Select(element)# 选择下拉框的value属性等于bj的选项
select.select_by_value("bj")
弹出框操作
常用弹出框类型
- alert:警告框
- confirm:确认框
- prompt:提示框
常用弹出框操作
- **点击确定**:`driver.switch_to.alert.accept()`
- **点击取消**:`driver.switch_to.alert.dismiss()`
- **在弹出框的文本框内输入文本**:`driver.switch_to.alert.send_keys("要输入的文本")`
- **获取弹出框文本内容**:`driver.switch_to.alert.text`
滚动条操作
使用
driver.execute_script()
运行js代码来达到滑动滚动条的操作
示例:
driver.execute_script("window.scrollBy(0,1000)")
解释: window.scrollBy(x,y),假如x=0,y=1000那么就是向上下滑动,假如x=1000,y=0则左右滑动
,比如x=1000,y=0那么就是向右滑动1000像素,x=0,y=1000那么就是向下滑动1000像素,假如要向上滑动1000像素,只要x=0,y=-1000即可。
frameset切换
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。如下段代码所示
形式一:
<htmllang="en"><head><title>FrameTest</title></head><body><iframesrc="a.html"id="frame1"name="myframe"></iframe></body></html>
形式二:
<frameset><framesrc="test01.html">....</frame><framesrc="test02.html">....</frame></frameset>
切换frame
- 使用数字进行切换:
driver.switch_to.frame(0)- 示例:driver.switch_to.frame(0)根据多个frame标签进行选择,默认第一个为0 - 使用id的属性进行切换:
driver.switch_to.frame(id的值)- 当id的值为my_id进行切换,示例:driver.switch_to.frame(my_id) - 使用name属性进行切换:
driver.switch_to.frame(name的值)- 当name的值为my_name时进行切换,示例:driver.switch_to.frame(my_name) - 使用element进行切换:
driver.switch_to.frame(element)- 使用元素定位来进行切换,示例:driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR,"[src*='A']"))
注意:注意切换同等级不同frame时需要退出当前的frame;比如1frame与2frame是同一层级,那么假如1frame后需要退出当前的frame然后才能进入frame2;假如frame1与frame2是父子层级,进入frame1后不用切换直接进入frame2即可;又比如进入了好几层深度的frame,那么只需要退出一次frame就会到第一层级(也就是主层级)
退出当前的frame
- 示例代码:
driver.switch_to.default_content()
切换窗口
获取当前窗口句柄
- 示例代码:
driver.window_handles
获取所有窗口句柄
- 示例代码:
driver.current_window_handle
根据窗口句柄进行切换
- 示例代码:
driver.switch_to.window(要切换的句柄代码)
cookie操作
假设当前网站cookie如下图所示:
获取单个cookie
获取BD_UPN的cookie代码示例:
driver.get_cookie("BD_UPN")
返回结果为:
{'domain': 'www.baidu.com', 'expiry': 1653226541, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}
获取所有cookie
获取所有的cookie代码示例:
driver.get_cookies()
返回结果为:
[{'domain': '.baidu.com', 'expiry': 1652448941, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'secure': False, 'value': '2c8k018185a50hekio1h7q39e0q'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'} ....省略]
添加cookie
添加cookie代码示例:
driver.add_cookie({"name":'test',"value":'123456'})
==
或者可以这样添加:
driver.add_cookie({'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'bbaaa', 'path': '/', 'secure': False, 'value': '4444'})
注意::假如要在使用cookie只能在
driver.get()
方法之后才能添加,所以要使用的话可以使用
driver.get()
方法,然后使用
driver.add_cookie()
添加cookie,最后调用
driver.refresh()
方法刷新页面即可
版权归原作者 达文西先生 所有, 如有侵权,请联系我们删除。