from selenium.webdriver.common.action_chains import ActionChains
perform():对整个动作的提交动作
context_click():右击
double_click():双击
drag_and_drop():拖动
move_to_element():鼠标悬停
2.定位到目标元素
click = driver.find_element_by_id("XX")
ActionChains(driver).context_click(click).perform()
双击和悬停同右击用法一样
二.鼠标拖放的操作
1. 定位到原位置
element = driver.find_element_by_id("xx")
2. 定位到目标位置
target = driver.find_element_by_id("yy")
ActionChains(driver).drag_and_drop(element,target).perform()
5.键盘事件
引入keys模块
from selenium.webdriver.common.keys import Keys
输入内容
driver.find_element_by_id("kw").send_keys("selenium")
删除键
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
空格+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")
全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
剪切输入框的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
回车键代替单击操作
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
send_keys(Keys.TAB): 制表键
send_keys(Keys.ESCAPE):回退键
send_keys(Keys.F1): 键盘F1
6.获得验证信息
通常用的最多的验证信息是title.URL.text
title:1.打印当前title和URL
title = drive.title
print(title)
now_url=driver.current_url
print(now_url)
2.执行126邮箱登陆的操作
。。。。。。。。。
3.再次打印当前title.URL和text
title = drive.title
print(title)
now_url=driver.current_url
print(now_url)
user= driver.find_element_by_id(“spnUid”).text
print(user)
结果:title和URL都发生了变化,text可以获取用户文本,是很好的验证信息。
7.设置元素等待
显示等待:引入WebDriverWait,第2,3,4行
WebDriverWaituntil_not()同.until()或者until_not()配合使用
presence_of_element_located:预期判断方法。之外还有很多种
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import
WebDriverWait
from selenium.webdriver.support import
expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
element =
WebDriverWait(driver,5,0.5).until(EC
.presence_of_element_located((By.ID,"kw")))
element.send_keys('selenium')
driver.quit()
is_displayed():判断元素是否可见:也是预期判断的方法
from selenium import webdriver
from time import ctime,sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
print (ctime())
for i in range(10):
try:
el = driver.find_element_by_id("kw22")
if el.is_displayed():
break
except:pass
sleep(1)
else:
print("time out")
driver.close()
print(ctime())
隐式等待:
引入: NoSuchElementException
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
try:
print(ctime())
driver.find_element_by_id("kw").send_keys("selenium")
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
sleep:修眠方法
from time import sleep
sleep(1)
8.定位一组元素
1.打开本地html文件,需要用到os模块,引入os模块
import os
2.定位文件
file_path = 'file:///' + os.path.abspath("checkbox.html")
3.从所选文件中定位一组元素
inputs = driver.find_element
s_by_tag_name("input")
input.click()
全选
部分选取:
for i in inputs:
if i.get_attribute('type') = = 'checkbox':
i.click()
打印所有的input元素的个数
print(len()inputs)
去掉所选元素的最后一个钩pop() pop(0):选择第一个
driver.find_element
s_by_tag_name("input").pop().click()
9.多表单的切换switch_to.frame():切换表单
1,引入os模块,然后定位当前路径下的文件,找到从文件中插入表单
import os
file_path = 'file:///' + os.path.abspath("checkbox.html")
2.切换到表单iframe(id=“if”),switch_to.frame():可以直接取表单的id或name属性
如果iframe没有可用的id或name属性,可以先通过xpath定位,然后将值传给switch_to.frame()
1. driver.switch_to.frame("if")
2.xf = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame("xf")
3.跳出离它最近的表单switch_to.parent_content()
driver.switch_to.parent_content()
4.跳回最外层的页面switch_to.default_content()
driver.switch_to.default_content()
10.多窗口的切换
1.打开百度首页,获得当前百度首页的句柄current_window_handle
sreach_windows = driver.current_window_handle
2.打开第二个窗口,注册窗口,找到登陆元素.click(),找到注册元素.click()
3.获得所有的窗口句柄:window_handles
all_handles = driver.window_handles
4.for handle in all_handles:
if handle != sreach_windows:
driver.switch_to_window(handle) 切换到注册窗口
if handle = sreach_windows:
driver.switch_to_window(handle) 回到搜索窗口
11.警告框处理
使用switch_to_alert()方法定位到alert/confirm/prompt警告/确认/提示,
然后使用text/accept/dismiss/send_keys等方法进行操作。
text:返回alert/confirm/prompt中的文字信息
accept():接受现有警告框
dismiss():解散现有警告框
send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框
实例:接受警告框
driver.switch_to_alert().accept()
12.上传文件send_keys()实现上传
1.引用os模块,找到当前路径下的html文件
file_path = 'file:///' + os.path.abspath('upfile.html')
driver.get(file_path)
2.定位file_path文件中的上传按钮,添加本地文件
driver.find_element_by_name('file').send_keys('D:\\upload_file.txt')
还可以通过autoit实现上传 (不建议使用此种方法)
13.下载文件(只针对Firefox浏览器)不同的浏览器设置方法不同
为了让
Firefox浏览器能实现文件的下载,需要通过对FirefoxProfile()做一些设置
1. ("browser.download.folderList",2)
设置成0代表下载到浏览器默认下载路径,设置成2则可以保存到制定目录。
2.("browser.download.manager.showWhenStarting",False)
是否显示开始;True为显示,False为不显示
3.browser.download.dir
用于指定所下载文件的目录。
os.getcwd()
不需要传递参数,用于返回当前目录
4.browser.helperApps.neverAsk.saveToDisk
指定要下载页面的Content-type值,HTTP Content-type常用对照表:http://tool.oschina.net/commons
application/octet-stream
为文件类型
from selenium import webdriver
import os
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")
driver = webdriver.Firefox(firefox_profile=fp)
driver.get("http://prpi.python.org/pypi/selenium")
driver.find_element_by_partial_link_text("selenium-2").click()
14.操作cookie 读取,添加和 删除cookie信息
cookie的数据是以字典的形式进行存放的
cookie = driver.get_cookies():获得所有的cookie信息
cookie = driver.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信息
实例:向cookie的Name和value中添加会话信息
driver.add_cookie({'name':'key-aaaaa','value':'value-bbbbb'})
for cookie in driver.get_cookies():
print("%s ->%s" %(cookie['name'],cookie['value']))
15.调用javaScript来控制浏览器的滚动条 或者向页面中的text area
文本框输入内容
execute_Script():来执行javaScript代码
window.scrollTo():设置浏览器窗口滚动条的水平和垂直位置,第一个表示水平的左间距,第二个表示垂直的上边距。
实例:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.set_window_size(600,600)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(5)
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(5)
driver.quit()
向页面中的text area
文本框输入内容
1.定义要输入的内容text
2.对文本框进行定位
3.将text与javaScript代码通过“+”进行拼接。目的:为了使输入的内容变得可自定义
4.通过execute_Script()执行javaScript代码
text = “input text”
js = "var sum=document.getElementById('id'); sum.value='" + text + "';"
driver.execute_Script(js)
16.处理html5的视频播放
WebDriver支持在指定的浏览器上测试HTML5,如果使用javaScript来测试这些功能就可以在任何浏览器上测试HTML5了。
arguments[]:包含了函数调用的参数数组,[0]表示取对象的第一个值
currentSrc:返回音频视频的url。若果未设置音频视频,则返回空字符串
load(),play(),pause()控制着视频的加载播放暂停
1.打开播放器页面
driver.get("http://videojs.com/")
2.定位到播放文件
video = driver.find_element_by_xpath("body/setion[1]/div/video")
3.返回播放文件的地址
url = driver.execute_script("return arguments[0].currentSrc;",video)
print(url)
4.播放视频
driver.execute_script("return arguments[0].piay()",video)
5.暂停视频
driver.execute_script("arguments[0].pause",video)
17.窗口截图
get_screenshot_as_file:截取当前窗口
driver.get_screenshot_as_file("D:\\pyse\\baidu_img.jpg") 保存的位置
18.关闭当前窗口
close():关闭当前窗口
19.验证码的处理
设置万能验证码
引入randint()函数,用于生成随机整数
from random import randint
verify = randint(1000,9999)
print("生成的随机数:%d",%verify)
number = input("请输入随机数:")
print(number)
number = int(number)
if number == verify:
print("登录成功")
elif number == 132741:
print("登录成功")
else:
print("验证码输入有误")
记录kookie(相当于记住密码)
访问xx网站
driver.get("http://www.xx.com")
将用户名密码写入浏览器cookie
driver.add_cookie({'name':'login_username','value':'username'})
driver.add_cookie({'name':'login_passwd','value':'passwd'})
再次访问xx网站,将会自动登陆
driver.get("http://www.xx.com")
20.webdriver的原理