selenium常见用法
1、打开和关闭浏览器
打开浏览器
driver=webdriver.Ie()
driver=webdriver.Chrome()
driver=webdriver.Firefox()
关闭浏览器
driver.close()
关闭浏览器以及浏览器驱动程序
driver.quit()
2、打开 Url
driver.get("url 地址")
3、切换框架/窗口(使用 switch_to 包)
(1)定位到当前聚焦的元素上
driver.switch_to.active_element()
(2)切换到 alert 弹窗
driver.switch_to.alert()
alert为警告框、confirm为确认框,prompt为输入框
# 获取alert对话框 dig_alert = driver.switch_to.alert time.sleep(1) # 打印警告对话框内容 print(dig_alert.text) # alert对话框属于警告对话框,我们这里只能接受弹窗 dig_alert.accept() time.sleep(1)
(3)切换到某个 frame
driver.switch_to.frame(index或 name)
index从0开始
切换到主页面
driver.switch_to.default_content()
切换到上一层的 frame
driver.switch_to.parent_frame()
(4)切换窗口
driver.switch_to.window(handle)
如何获取handle?
通过driver.window_handles 方法获取当前浏览器所有窗口的handle
通过循环切换窗口判断标题的方法来确定当前窗口是否为目标窗口
获取当前窗口handle: driver.current_window_handle
4、页面元素的属性和方法
获得网页标题
driver.title()
获得当前窗口地址栏URL
driver.current_url
获得页面元素的文本值(属于属性)
对象.text
获得指定属性的值
对象.get_attribute("属性名")
获取元素对应的HTML片段
获取整个web元素的HTML片段
element.get_attribute("outerHTML")
获取web元素内部子元素的HTML片段
element.get_attribute("innerHTML")
Select(对象)的操作
需要导入包:from selenium.webdriver.support.select import Select
根据索引选择元素
select_by_index
根据文本选择元素
select_by_visible_text
取消所有选项
deselect_all()
取消对应 index 选项
deselect_by_index()
取消对应 value 选项
deselect_by_value()
取消对应文本选项
deselect_by_visible_text()
返回第一个选项
first_selected_option()
返回所有的选项
all_selected_options()
用于键盘输入数据
element.send_keys("数据")
点击元素(支持单选按钮、 复选框、 命令按钮)
element.click()
5、刷新页面,前进,后退
driver.refresh()
driver.forward()
driver.back()
6、截屏:
截取整个页面:driver.get_screenshot_as_file(img_path)
截取单个元素: web_element screenshot(img_path)
ele=driver.find_element_by_id("kw") ele.screenshot("./ele.png")
# img_path是图片路径,类型str
7、改变窗口大小
将窗口最大化
driver.maximize_window()
将窗口最小化
driver.minimize_window()
获取窗口大小
size = driver.get_window_size()
改变窗口大小(传递宽度和高度,单位是像素)
driver.set_window_size(1100,size['height'])
8、滚动屏幕
js语言:window.scrollBy(250,0) 就是横向滚动250个像素
selenium里面使用js代码
driver.execute_script('window.scrollBy(200,0)')
9、 键盘事件
一、key包提供按键方法
使用必须先引用key包:from selenium.webdriver.common.keys import Keys
键盘事件,在现实操作中我们习惯性的按tab见切换到写一个输入或者元素,Key()类几乎提供所有按键的方法:
常用键盘操作
引用方法 对应键盘
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
send_keys(Keys.F12) 键盘 F12
二、使用操作
1.通过回车键代替点击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
2.使用ctrl+A 全选操作
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
3.删除多输入的一个字符
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
4.输入空格+“个性LOVE”
driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys(u"个性LOVE") # 避免使用的是selenium2报错,这里输入中文时需要加入小写u
5.剪切
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
6.粘贴
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
三、显示等待和隐式等待
1、强制等待
time.sleep(5) 强制等待5s
2、隐式等待
driver.implicitly_wait(5) 设置一个等待时间,轮询(默认0.5s)查找元素是否出现,如果没有出现抛异常
作用于所有find_element方法
3、显式等待
在代码中定义等待条件,当条件发生时才继续执行代码
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
- driver:浏览器驱动
- timeout:最长超时时间,默认以秒为单位
- poll_frequency:检测的间隔(步长)时间,默认为0.5S
- ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
WebDriverWait()一般由until()或 until_not()方法配合使用
until(method, message=' ')
:调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method, message=' ')
:调用该方法提供的驱动程序作为一个参数,直到返回值为False
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Firefox() driver.get('http://www.baidu.com') element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw"))) element.send_keys('selenium')
四、常用的操作事件
ActionChains(driver).move_to_element(element).click(element).perform()
actions=ActionChains(driver) actions.move_to_element(element) actions.click(element) actions.perform()
举例:
ActionChains(driver).click(element).perform()#点击
ActionChains(driver).double_click(element).perform() #双击
ActionChains(driver).context_click(element).perform() #右键
ActionChains(driver).move_to_element(element).perform() #将鼠标移动到某个元素上
ActionChains(driver).drag_and_drop(element1,element2).perform() #将元素1移动到元素2上
2、TouchActions:可以对h5页面进行操作,实现点击、滑动、拖拽、多点触控、以及模拟手势的各种操作
手势控制:
tap----在指定元素上敲击
double_tap------在指定元素上双敲击
tap_and_hold---------在指定元素上点击但不释放
move-------手势移动指定偏移(未释放)
release-----------释放手势
scroll--------手势点击并滚定
scorll_from_element-----从某个元素位置开始手势点击并滚动(向下滑动为负数,向上滑动为正数)
long_press----------长按元素
flick----------手势滑动
flick_element-----------从某个元素位置开始手势滑动(向上滑动为负数,想下滑动为正数)
perform 执行
''' 打开百度页面,输入selenium测试,使用TouchActions点击搜索,滑动到底部.并点击下一页 :return: ''' option=webdriver.ChromeOptions() option.add_experimental_option("w3c",False) driver = webdriver.Chrome("/Users/grace/selenium/driver/88/chromedriver",options=option) driver.get("https://www.baidu.com") driver.maximize_window() el=driver.find_element_by_id("kw") search_ele=driver.find_element_by_id("su") el.send_keys("selenium测试") TouchActions(driver).tap(search_ele).perform() #点击百度一下 TouchActions(driver).scroll(0,10000).perform() next_ele=driver.find_element_by_xpath("//*[@id='page']/div/a[10]") TouchActions(driver).tap(next_ele).perform() time.sleep(3) driver.quit()
其他用法可参考:https://www.cnblogs.com/crystal1126/p/12390398.html
五、调用javascript进行操作
driver.execute_script()
(1)定位某个元素
driver.execute_script("document.getElementById('kw')")
(2)定位元素并获取返回值
element=driver.execute_script("return document.getElementById('kw')")
(3)滑动到页面最底部
driver.execute_script('window.scrollTo(0,10000)')
(4)滑动到页面最顶部
driver.execute_script('window.scrollTo(0,0)')
(5)修改控件的readonly属性
driver.get("https://www.12306.cn/index/") driver.execute_script("document.getElementById('train_date').removeAttribute('readonly')") time.sleep(2) driver.execute_script("document.getElementById('train_date').value='2021-12-30'") time.sleep(2)
posted on 2020-05-08 13:29 crystal1126 阅读(292) 评论(0) 编辑 收藏 举报