Selenium WebDriver
一、浏览器操作方法
from selenium import webdriver
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
driver.maximize_window() #最大化
driver.set_window_size(100,100) #设置浏览器大小
driver.set_window_position(300,200) #设置浏览器位置
driver.back() #后退
driver.forward() #前进
driver.refresh() #刷新
driver.close() #关闭当前窗口
driver.quit() #关闭所有WebDriver启动的窗口
driver.title #获取页面title
driver.current_url #获取当前页面url
driver.get_screenshot_as_file(1.jpg) #截屏
二、选择器
from selenium import webdriver
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
driver.find_element_by_id("name") #id定位
driver.find_element_by_name("PeriodName") #name定位
driver.find_element_by_class_name("u-btn-levred") #class定位
driver.find_element_by_tag_name("input") #tag定位(标签)
driver.find_element_by_link_name("text") #link定位(专门用来定位文本链接)
driver.find_element_by_partial_link_text("text") #是对link定位的一种补充(可选区部分连接文本#唯一)
driver.find_element_by_xpath("//*[@id="kw"]") #xpath定位(支持相对路径,绝对路径)
driver.find_element_by_css_selector("input") #css定位(标签选择器"input"id选择器"#id_name"类class选择器".class_name"属性选择器"[type=submit]")层级选择器(可以多条件定位 空格隔开)
如果选择出来多个使用find_elements 选择所有,然后用下标定位,列如 .find_element_by_link_name("text")[0]
xpath与css定位功能都很强大,速度上css更快(但是对我来说速度啥的没啥用)
拓展(By定位元素)
除find_element_by_***这种方式,还有另一套写法,也就是统一调用find_element()方法,两个参数,第一个参数是定位的类型,由By提
供;第二个参数是定位的具体值
from selenium import webdriver
from selenium.webdriver.common.by import By #使用By这种定位前要将By类导入
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
driver.find_element(By.ID,"loginName")
driver.find_element(By.NAME,"SubjectName")
driver.find_element(By.CLASS_NAME,"u-btn-levred")
driver.find_element(By.TAG_NAME,"input")
driver.find_element(By.LINK_TEXT,"退出")
driver.find_element(By.PARTIAL_LINK_TEXT,"退")
driver.find_element(By.XPATH,".//*[@id=‘Title")
driver.find_element(By.CSS_SELECTOR,"[type=submit]")
推荐使用第一种
三、元素操作方法
from selenium import webdriver
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
element = driver.find_element_by_id("name")
element.click()
element.click() #点击元素
element.send_keys() #输入
element.clear() #清除文本
element.size #返回元素大小
element.text #获取元素的文本
element.get_attribute("id") #获取属性值
element.is_display() #判断元素是否可见
element.is_enable() #判断元素是否可用
四、鼠标操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
mouse = ActionChains(driver)
element = driver.find_element_by_id("name")
mouse.click(element).perform() #.perform()执行
mouse.click(on_element=None) #单击鼠标左键
mouse.click_and_hold(on_element=None) #点击鼠标左键,按住不放
mouse.context_click(on_element=None) #点击鼠标右键
mouse.double_click(on_element=None) #双击鼠标左键
mouse.drag_and_drop(source, target) #拖拽到某个元素然后松开
mouse.drag_and_drop_by_offset(source, xoffset, yoffset) #拖拽到某个坐标然后松开
mouse.move_by_offset(xoffset, yoffset) #鼠标移动到距离当前位置(x,y)
mouse.move_to_element(to_element) #鼠标移动到某个元素
mouse.move_to_element_with_offset(to_element, xoffset, yoffset) #将鼠标移动到距某个元素多少距离的位置
mouse.release(on_element=None) #在某个元素位置松开鼠标左键
.perform() #执行链中的所有动作
五、键盘操作
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox("驱动路径")
driver.get("http://www.XX.com")
element = driver.find_element_by_id("name")
element.send_keys()
element.send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
element.send_keys(Keys.SPACE) #空格键(Space)
element.send_keys(Keys.TAB) #制表键(Tab)
element.send_keys(Keys.ESCAPE) #回退键(Esc)
element.send_keys(Keys.ENTER) #回车键(Enter)
element.send_keys(Keys.CONTROL,‘a‘) #全选(Ctrl+A)
element.send_keys(Keys.CONTROL,‘c‘) #复制(Ctrl+C)
element.send_keys(Keys.CONTROL,‘x‘) #剪切(Ctrl+X)
element.send_keys(Keys.CONTROL,‘v‘) #粘贴(Ctrl+V)
element.send_keys(Keys.F1) #键盘F1
主要为了实现输入特殊按键,和组合键
六、元素等待
sleep 强制等待
from time import sleep
sleep(2) #设置等待2秒钟
implicitly_wait() 隐性等待
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(20) #设置等待20秒钟,全局生效
driver.get(‘http://www.XX.com‘)
WebDriverWait()显示等待
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait #WebDriverWait注意大小写
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,‘kw‘)))
element.send_keys(‘123‘)
七、下拉框
通过select 进行定位下拉框
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
element = driver.find_element_by_id("wb") #定位select标签
select = Select(element) #实列化
select.select_by_index(1).click() #通过index进行选择
select.select_by_value(1).click() #通过value进行选择
select.select_by_visile_text("1").click() #通过选项文字进行选择
多级定位
element=driver.find_element_by_id("wb")
element.find_element_by_xpath("//option[@value=‘0‘]").click()
css直接定位
driver.find_element_by_css_selector("#id > option:nth-child(1)").click() #直接定位
八、弹窗
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
driver.find_element_by_xpath("//input[@onclick=‘showAlert()‘]").click() #点击元素弹窗
alert_window = driver.switch_to.alert #切换到弹窗
alert_window.text #获取对话窗文本值
alert_window.accept() #接受弹窗
alert_window.dismiss() #取消弹窗
alert_window.send_keys() #输入值(alert和confirm没有输入对话框,所以就不用能用了,只能使用在prompt里)
九、frame
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
element = driver.find_element_by_id("name") #获取frame元素
driver.switch_to.frame(element) #切换frame
driver.switch_to.parent_frame() #返回到父级
driver.switch_to.default_content() #返回最外层
十、窗口
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
#获取窗口句柄
current_handle = driver.current_window_handle
all_handle = driver.window_handles
#切换窗口
driver.switch_to.window(all_handles[-1])
driver.switch_to.window(current_handle)
十一、cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(‘http://www.XX.com‘)
driver.get_cookie(name) #返回单个名为name的cookie信息,如果没有找到,返回none
driver.get_cookies() #返回当前会话所有的cookie信息
driver.add_cookie(cookie_dict) #在当前会话中添加cookie信息
driver.delete_cookie(name) #删除单个名为name的cookie信息
driver.delete_all_cookies() #在当前会话中删除所有cookie信息
十二、JS
driver.execute_async_script(script, args) #异步执行JS代码,script:被执行的JS代码,args:js代码中的任意参数
driver.execute_script(script, args) #同步执行JS代码,script:被执行的JS代码,args:js代码中的任意参数
#举例:使用js拖动混动条
js = "window.scrollTo(0,10000)" #(0,100)滚动条位置
driver.execute_script(js)