WebDriver对象的一些方法
1. driver.title #获取当前页面左上角的title
2. driver.current_url #获取当前页面的url
3. driver.get_screenshot_as_file('路径+文件名') --关键信息人工复检, 特别是测试不通过时, 或者定位问题有时也需要
现在只能截取整个页面的,不能只截取某个元素的。
4.driver.refresh() #刷新
5.drvier.forward() #前进
6.driver.back() #后退
7.driver.quit() #退出驱动并关闭所有窗口,这个在任务管理器看,驱动的进程也被干掉了。
8.driver.close() #关闭当前窗口
9.driver.current_window_handle #句柄
10.driver.page_source #返回页面源码
11.driver.maximize_window() #最大化窗口:
12.driver.set_window_size(600,800) #设置窗口参数:
切换窗口
循环遍历 driver.window_handles (保存了当前自动化打开的所有窗口)
方法切入新窗口 driver.switch_to.window(handle)
检查该窗口的特点,是否为要切入的那个
mainWindow = driver.current_window_handle //保存主窗口的hanlde
for handle in driver.window_handles:
driver.switch_to.window(handle)
if "百度" in driver.title:
break //切换到百度窗口
在新窗口的操作代码
driver.close() //关闭百度窗口 quit关闭整个浏览器和浏览器驱动,所有这里要用close
driver.switch_to.window(mainWindow) //返回原来的主窗口
弹出对话框(属于浏览器原生提供的,不是HTML的一部分, F12查看不出元素)
有三种
alert--一般只有确定按钮
confirm -- 一般有确定和取消按钮
prompt--要输入,要用户提供一些信息的
操作方法:
driver.switch_to.alert.accept() #点击OK
driver.switch_to.alert.text #获取alter对话框中的文本
driver.switch_to.confirm.accept()
driver.switch_to.confirm.dismiss() #点击取消
driver.switch_to.confirm.text
driver.switch_to.prompt.accept()
driver.switch_to.prompt.dismiss()
driver.switch_to.prompt.text
driver.switch_to.prompt.send_keys('XXX') #输入内容
driver.switch_to.alert返回的就是一个alter对象, 也可以这么写
alter = driver.switch_to.alert
alter.accept()
怎么判断是上面的这三种窗口: F12, 看是否能侦察出元素
自动化上传文件:
方法1:
直接发送键盘消息给 当前应用程序
前提是浏览器必须是当前应用
操作不是驱动浏览器完成的,而是直接驱动win32来完成的。 所以当前浏览器必须是当前应用
import win32com.client
shell = win32com.client.Dispatch('WScript.Shell')
shell.SendKeys(r"d:\tmp\aaa.png"+'\n') #\n相当于点击回车
方法2:定位到元素后直接send_keys
driver.find_element_by_class_name('soutu-btn').click()
driver.find_element_by_class_name('upload-pic').send_keys(r"E:\笔记\wechat.png")
易消失的元素查看技巧: (鼠标移到该元素上面才会出现,鼠标移开就会消失)
在Console里输入javaScript代码
setTimeout(function(){debugger;},5000) 5S后,把界面冻住,再去查看页面元素
直接copy css/xpath的缺点:
如果元素ID靠的太远,生成的路径比较长 这样被修改的可能行更大(如中间的某个元素被改变,路径就失效了), 代码的健壮性差。
异常捕获,确保Chrome进程退出,(有遇到升级后某个元素失效,第二天机器被chrome占领的情况)
将代码放在try里, finally中有quit()
滚动条
1. 将滚动条拖到最底部
js = "var action=document.documentElement.scrollTop=10000"
driver.execute.script(js)
scrollTop=是指滚动条距离顶部的距离, 设置很大,最底部, 设置为0, 顶部。
2. 将滚动条拖到最顶部
js = "var action=document.documentElement.scrollTop=0"
driver.execute.script(js)
3.driver.set_window_size(600, 600)
4.js = "window.scrollTo(100,450);"
driver.execute_script(js)
Selenium定位方式:
id定位:find_element_by_id()
name定位:find_element_by_name()
class定位:find_element_by_class()
tag定位:find_element_by_tag_name()
link定位:find_element_by_link_text()
partial link 定位: find_element_by_partial_link_text()
xpath定位
css selector定位
提交表单(相当于回车) .submit()
鼠标事件:
from selenium.webdriver.common.action_chains import ActionChains
.perform() 执行所有ActionsChains中存储的行为
context_click() 右击
double_click() 双击
drag_and_drop(source,target) 鼠标拖放
move_to_element() 鼠标悬停在一个元素上 (出现下拉列表框)
click_and_hold() 按下鼠标左键在一个元素上
left = driver.find_element_by_name("name")
ActionChains(driver).click_and_hold(left).perform
常用键盘事件:
from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE)
send_keys(Keys.SPACE)
send_keys(Keys.XXX) TAB,ESCPAE,ENTER,F1....
send_keys(Keys.CONTROL,'a') ---Ctrl+A 全选
cookie处理:
get_cookies():获得所有cookie信息
get_cookie(name):返回字典的key为“name”的cookie信息
add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值
delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”
delete_all_cookies():删除所有cookie信息
WebDriver对象的一些方法
1. driver.title #获取当前页面左上角的title
2. driver.current_url #获取当前页面的url
3. driver.get_screenshot_as_file('路径+文件名') --关键信息人工复检, 特别是测试不通过时, 或者定位问题有时也需要
现在只能截取整个页面的,不能只截取某个元素的。
4.driver.refresh() #刷新
5.drvier.forward() #前进
6.driver.back() #后退
7.driver.quit() #退出驱动并关闭所有窗口
8.driver.close() #关闭当前窗口
9.driver.current_window_handle #句柄
10.driver.page_source #返回页面源码
11.driver.maximize_window() #最大化窗口:
12.driver.set_window_size(600,800) #设置窗口参数:
切换窗口
循环遍历 driver.window_handles (保存了当前自动化打开的所有窗口)
方法切入新窗口 driver.switch_to.window(handle)
检查该窗口的特点,是否为要切入的那个
mainWindow = driver.current_window_handle //保存主窗口的hanlde
for handle in driver.window_handles:
driver.switch_to.window(handle)
if "百度" in driver.title:
break //切换到百度窗口
在新窗口的操作代码
driver.close() //关闭百度窗口 quit关闭整个浏览器和浏览器驱动,所有这里要用close
driver.switch_to.window(mainWindow) //返回原来的主窗口
弹出对话框(属于浏览器原生提供的,不是HTML的一部分, F12查看不出元素)
有三种
alert--一般只有确定按钮
confirm -- 一般有确定和取消按钮
prompt--要输入,要用户提供一些信息的
操作方法:
driver.switch_to.alert.accept() #点击OK
driver.switch_to.alert.text #获取alter对话框中的文本
driver.switch_to.confirm.accept()
driver.switch_to.confirm.dismiss() #点击取消
driver.switch_to.confirm.text
driver.switch_to.prompt.accept()
driver.switch_to.prompt.dismiss()
driver.switch_to.prompt.text
driver.switch_to.prompt.send_keys('XXX') #输入内容
driver.switch_to.alert返回的就是一个alter对象, 也可以这么写
alter = driver.switch_to.alert
alter.accept()
怎么判断是上面的这三种窗口: F12, 看是否能侦察出元素
自动化上传文件:
方法1:
直接发送键盘消息给 当前应用程序
前提是浏览器必须是当前应用
操作不是驱动浏览器完成的,而是直接驱动win32来完成的。 所以当前浏览器必须是当前应用
import win32com.client
shell = win32com.client.Dispatch('WScript.Shell')
shell.SendKeys(r"d:\tmp\aaa.png"+'\n') #\n相当于点击回车
方法2:定位到元素后直接send_keys
driver.find_element_by_class_name('soutu-btn').click()
driver.find_element_by_class_name('upload-pic').send_keys(r"E:\笔记\wechat.png")
易消失的元素查看技巧: (鼠标移到该元素上面才会出现,鼠标移开就会消失)
在Console里输入javaScript代码
setTimeout(function(){debugger;},5000) 5S后,把界面冻住,再去查看页面元素
直接copy css/xpath的缺点:
如果元素ID靠的太远,生成的路径比较长 这样被修改的可能行更大(如中间的某个元素被改变,路径就失效了), 代码的健壮性差。
异常捕获,确保Chrome进程退出
将代码放在try里, finally中有quit()
滚动条
1. 将滚动条拖到最底部
js = "var action=document.documentElement.scrollTop=10000"
driver.execute.script(js)
scrollTop=是指滚动条距离顶部的距离, 设置很大,最底部, 设置为0, 顶部。
2. 将滚动条拖到最顶部
js = "var action=document.documentElement.scrollTop=0"
driver.execute.script(js)
3.driver.set_window_size(600, 600)
4.js = "window.scrollTo(100,450);"
driver.execute_script(js)
Selenium定位方式:
id定位:find_element_by_id()
name定位:find_element_by_name()
class定位:find_element_by_class()
tag定位:find_element_by_tag_name()
link定位:find_element_by_link_text()
partial link 定位: find_element_by_partial_link_text()
xpath定位
css selector定位
提交表单(相当于回车) .submit()
鼠标事件:
from selenium.webdriver.common.action_chains import ActionChains
.perform() 执行所有ActionsChains中存储的行为
context_click() 右击
double_click() 右击
drag_and_drop(source,target) 鼠标拖放
move_to_element() 鼠标悬停在一个元素上 (出现下拉列表框)
click_and_hold() 按下鼠标左键在一个元素上
left = driver.find_element_by_name("name")
ActionChains(driver).click_and_hold(left).perform
键盘事件:
from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE)
send_keys(Keys.SPACE)
send_keys(Keys.XXX) TAB,ESCPAE,ENTER,F1....
send_keys(Keys.CONTROL,'a') ---Ctrl+A 全选
cookie处理:
get_cookies():获得所有cookie信息
get_cookie(name):返回字典的key为“name”的cookie信息
add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值
delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”
delete_all_cookies():删除所有cookie信息