python - selenium API
本篇文章主要介绍selenium - api常用的一些方法:
浏览器操作
from selenium import webdriver import time # 打开浏览器 driver = webdriver.Chrome() # 请求url driver.get('http://ui.imdsx.cn/uitester/') time.sleep(2) # 执行滚动条回到最上方 执行脚本,通过document命令执行js driver.execute_script('document.body.scrollTop=0') # 获取超链接的元素 dom = driver.find_element_by_css_selector('div>a[href="http://www.imdsx.cn"]') dom.click() # 刷新页面driver.refresh() time.sleep(2) # 后退 driver.back() time.sleep(1) # 前进 driver.forward() time.sleep(1) # 退出驱动 driver.quit()
元素定位:
from selenium import webdriver import time from selenium.webdriver.common.by import By ''' 元素定位 1. 通过id进行元素定位 2. 通过name进行元素定位 3. 通过classname进行元素定位 4. 通过xpath进行元素定位 5. 通过classname进行元素定位 6. 通过css seletor进行元素定位 7. 通过link test超链接进行元素定位 8. 通过tag name进行元素定位 9. 通过find_element进行元素定位 ''' driver = webdriver.Chrome() # 请求url driver.get('http://ui.imdsx.cn/uitester/') time.sleep(2) # 执行滚动条回到最上方 执行脚本,通过document命令执行js driver.execute_script('document.body.scrollTop=0') # id元素定位 eleid = driver.find_element_by_id('i1') # 向文本框赋值 eleid.send_keys('1') time.sleep(2) # name元素定位 elename = driver.find_element_by_name('name') elename.send_keys('byz') time.sleep(2) # classname元素定位 eleclass = driver.find_element_by_class_name('classname') eleclass.send_keys('class') time.sleep(2) # xpath元素定位 elexpath = driver.find_element_by_xpath('//input[@placeholder="请通过XPATH定位元素"]') elexpath.send_keys('xpath') time.sleep(2) #css_ elector元素定位 elecass = driver.find_element_by_css_selector('.inner>input[placeholder="请通过CSS SELECTOR定位元素"]') eleclass.send_keys('css selector') time.sleep(2) # tagname元素定位,获取所有的input标签元素(注:在一个页面中,标签一定会重复,所以不用这个来进行定位) eletags = driver.find_elements_by_tag_name('input')[0] #获取第一个input框 # 超链接,通过超链接直接的文本进行定位 elelink = driver.find_element_by_link_text('跳转大师兄博客地址') elelink.click() time.sleep(1) # 通过标签中文本的模糊匹配查找 driver.find_elements_by_partial_link_text('录') # 通过find_element 单数 进行参数化 ele = driver.find_element(By.ID, 'i1') ele.send_keys(1111) time.sleep(2) #复数 通过find_elements 进行参数化 ids = driver.find_elements(By.ID, 'i1')
获取标签元素常用的一共有8种定位方式,而selenium实际提供了18种,还有8种是上面的复数形式,实际工作中不常用,还有2种是上面说的16种底层封装,参数化的一种调用方式而已。
元素的操作API
from selenium import webdriver import time ''' 操作element常用的方法 1. send_keys 赋值操作 2. click 点击操作 3. clear 清除文本框操作 4. 通过属性名称获取属性信息 5. 校验元素是否隐藏,返回true 和 false 6. 校验元素是否被选中,返回true和false 7. 返回当前标签的元素名称 8. 获取当前标签的宽和高 9. 获取元素的文本内容 10. 模仿回车按钮,测试submit 11. 获取当前元素的坐标,location ''' # 启动浏览器 driver = webdriver.Chrome() # 请求url driver.get('http://ui.imdsx.cn/uitester/') time.sleep(3) # 执行滚动条回到最上方 执行脚本,通过document命令执行js driver.execute_script('document.body.scrollTop=0') time.sleep(1) # 定位元素 ele = driver.find_element_by_id('i1') # 文本框赋值 ele.send_keys(111) time.sleep(2) # 清除文本框 ele.clear() # 通过属性名称获取属性 print(ele.get_attribute('type')) print(ele.get_property('type')) # 查看元素是否隐藏,没有隐藏则显示为true,隐藏则为false dis = driver.find_element_by_id('i1').is_displayed() # checkbox 多选框,校验是否已勾选,已勾选则为true,未勾选为false driver.find_element_by_id('on').is_selected() # 返回当前标签的标签元素名称 print(driver.find_element_by_id('on').tag_name) # 获取当前标签的宽和高 print(driver.find_element_by_id('i1').size) # ------------------------- 获取文本内容---------------------------- # 获取标签与标签之间的文本内容 print(driver.find_element_by_id('key-demo').text) print(driver.find_element_by_link_text('跳转大师兄博客地址').text) # -------------------模仿回车按钮,submit----------------- # 访问百度链接,模拟回车操作,提交数据 driver.get('https://www.baidu.com/') ele = driver.find_element_by_id('kw') ele.send_keys('1111') ele.submit() # ------------------获取当前元素的坐标,location --------------------- ele = driver.find_element_by_id('i1') # 获取当前元素的坐标 print(ele.location) time.sleep(2) # 截图操作,保存到当前目录下 ele.screenshot('b.jpg')
截取当前页面保存为图片
# 获取当前页面的二进制图片数据,需要自己去写入文件 driver.get_screenshot_as_png() # as_png的上层封装,需要传入图片名称自动写成图片 driver.get_screenshot_as_file('filename.png')
执行javascript语句
# 执行滚动条回到最上方 执行脚本,通过document命令执行js # js命令 js = 'document.body.scrollTop=0' # 执行javascript语句 driver.execute_script(js) # 第二种js命令写法,传入参数x,y也就是宽和高 js1 = 'window.scrollTo(0,0)' # 执行js命令 driver.execute_script(js1)
关闭与退出
# 当开启多个页面时,关闭当前页面 driver.close() # 退出并关闭所有页面的驱动 driver.quit()
windows 窗口操作
from selenium import webdriver import time ''' 操作windows 窗口 重要: 1. 获取当前浏览器的句柄: driver.current_window_handle 2. 获取所有浏览器的句柄信息: driver.window_handles ''' #启动浏览器 driver = webdriver.Chrome() # 请求url driver.get('http://ui.imdsx.cn/uitester/') time.sleep(3) # 执行滚动条回到最上方 执行脚本,通过document命令执行js driver.execute_script('document.body.scrollTop=0') time.sleep(1) # -------------windows窗口操作--------------- # 获取当前浏览器窗口的句柄对象 dom = driver.current_window_handle # 获取所有的浏览器窗口句柄对象,返回结果是list dom_list = driver.window_handles print('多个浏览器窗口时获取第二个窗口的句柄', driver.window_handles[1]) # 最大化当前窗口,不需要传参 driver.maximize_window() # 获取当前浏览器的大小 driver.get_window_size() # 通过像素设置浏览器的大小 driver.set_window_size(800, 100) # 设置当前窗口针对windows的位置,x,y driver.set_window_position(100, 100) # 获取当前浏览器在windows的坐标 driver.get_window_position()
cookie操作
from selenium import webdriver import time ''' 操作cookie 1. 根据cookie名称获取cookie信息 2. 获取cookie对应的value值 3. 获取所有的cookies 4. 根据cookie名称删除cookie 5. 删除所有的cookie 6. 添加cookie,cookie格式是字典 ''' #启动浏览器 driver = webdriver.Chrome() # 请求url driver.get('http://ui.imdsx.cn/uitester/') time.sleep(3) # 执行滚动条回到最上方 执行脚本,通过document命令执行js driver.execute_script('document.body.scrollTop=0') time.sleep(1) # --------------------cookie操作----------------------- # 根据cookie名称获取cookie信息, # 返回结果是字典:{'value': 'UiCodeUitester1122334455', 'name': 'UiCode', 'httpOnly': False, 'path': '/', 'secure': False, 'domain': 'ui.imdsx.cn'} cookie = driver.get_cookie('UiCode') # 获取cookie对应的值 cookie_value = cookie.get('value') # 定位到cookie的元素并将cookie值赋值进行 driver.find_element_by_name('cookie').send_keys(cookie_value) # 点击下其他元素校验cookie是否添加成功 driver.find_element_by_id('cookie-span').click() # 获取所有的cookie print(driver.get_cookies()) # 删除所有cookie driver.delete_all_cookies() # 根据cookie名称删除cookie driver.delete_cookie('UiCode') # 添加cookie, cookie格式必须如下形式 cookie_dic = {'name': 'byz', 'value': 'testaa'} driver.add_cookie(cookie_dic)
其他
# -------------------------------其他-------- # 返回当前页面的url print(driver.current_url) # 返回当前页面源码 print(driver.page_source) # 返回title标签中的文本 UiTester print(driver.title) # 返回当前使用的浏览器名称 print(driver.name)
常见异常
NoSuchElementException:没有找到元素
NoSuchFrameException:没有找到iframe
NoSuchWindowException:没找到窗口句柄handle
NoSuchAttributeException:属性错误
NoAlertPresentException:没找到alert弹出框
ElmentNotVisibleException:元素不可见
ElementNotSelectableException:元素没有被选中
TimeoutException:查找元素超时
以上是常用的api操作~~~~~