WebDriver是相当强大的,利用它几乎能模拟实现浏览器的一切操作行为。当然,它的功能虽强大,有时候操作却很不方便(我真的没有特指frame的切换问题)。下面我就介绍一下WebDriver一些常见的API。
WebDriver英文原版API传送门:http://selenium-python.readthedocs.org/en/latest/api.html
Webdriver初接触
要使用Webdriver,首先要把它导入进来。推荐的导入方式是:
from selenium import webdriver
然后把浏览器句柄赋给一个对象:
driver= webdriver.Chrome()
利用driver对象来调用下面的API
WebdriverAPI(按照首字母排序)
add_cookie(cookie_dict)
添加一个cookie到当前的会话。
cookie_dict:字典对象,必要的keys有“name”和“value”,可选的keys有path”, “domain”,“secure”, “expiry”
l使用示例:
driver.add_cookie({"name" : "foo", "value" : "bar"}) driver.add_cookie({"name" : "foo", "value" : "bar", "path" : "/"}) driver.add_cookie({"name" : "foo", "value" : "bar", "path" : "/", "secure":True})
back()
控制浏览器后退
l使用示例:
driver.back()
close()
关闭当前窗口
l使用示例:
driver.close()
create_web_element(element_id)
创建一个具有特定element_id的web对象(有用吗?)
delete_all_cookies()
删除会话范围内所有的cookies
l使用示例:
driver.delete_all_cookies()
delete_cookie(name)
删除会话中指定名称为内name的cookie
l使用示例:
driver.delete_cookie("my_cookie")
execute(driver_command,params=None)
发送一个由command.CommandExecutor执行的命令
l参数:
driver_command:命令的名称,string类型
params:命令的参数,dictionary对象,可包括多个参数
l返回值:命令执行完毕的JSON响应,加载到一个dictionary对象
l使用示例:其实很多Webdriver的API都是基于这个函数封装的,如通用查找函数find_element的定义如下:
def find_element(self,by=By.ID, value=None): if isinstance(by, tuple) or isinstance(value, int)or value==None: raise InvalidSelectorException("Invalid locatorvalues passed in") returnself.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
最后一句话执行了FIND_ELEMENT命令,参数是using(by)和value(value),返回了dictionary类型的命令执行结果,并取其中的value。
execute_async_script(script,*args)
在当前窗口或框架中,异步执行javascript脚本(可以边操作边执行)
l参数:
script:待执行的javascript脚本
params:任何用于上述javascript的参数(很霸气有木有)
l返回值:无
l使用示例:
driver.execute_async_script("document.title")
execute_script(script,*args)
在当前窗口或框架中,同步执行javascript脚本
l参数:
script:待执行的javascript脚本
params:任何用于上述javascript的参数
l返回值:无
l使用示例:
driver.execute_script("document.title")
find_element(by,value)
查找元素,可适应所有的查找方式, find_element_by_*函数就是调用它来实现的。
l参数:
by:查找元素的方法,包括id、name、link text、xpath、class name…
value:需要查找的内容
l返回值:找到就返回元素的对象;找不到的话抛出异常
l使用示例:
driver.find_element("name","element_name")#注意两个参数都要加引号
find_element_by_*(args)
包括一批查找元素的方法,它们比较类似,所以一起写了。包括id、name、class_name、css_selector、link_text、partial_link_text、xpath,以后将在如何查找页面元素的博文里详细讲解
l参数:
args:待查找的内容
l返回值:找到就返回元素的对象;找不到的话抛出异常
l使用示例:
driver.find_element_by_class_name("foo") driver.find_element_by_css_selector("#foo") driver.find_element_by_id("foo") driver.find_element_by_link_text("Sign In") driver.find_element_by_name("foo") driver.find_element_by_partial_link_text("Sign") driver.find_elemdriver.find_element_by_tag_name("foo") driver.find_element_by_xpath("//div/td[1]")
find_elements(by,value)
跟find_element函数类似,不同的是可查找多个匹配的元素
l参数:
by:查找元素的方法,包括id、name、link text、xpath、class name…
value:需要查找的内容
l返回值:返回所有匹配的元素对象,放在list中;找不到的话抛出异常
l使用示例:
driver.find_elements("name","element_name")
find_elements_by_*(args)
不用我赘述了吧,结合find_element_by_*和find_elements就懂了
foward()
控制浏览器前进
l使用示例:
driver.foward()
get(url)
在当前浏览器的中加载一个网页
l参数:
url:需要加载的网址(强烈建议使用完整的URL,否则会加载失败)
l使用示例:
driver.get("http://www.baidu.com")
get_cookie(name)
根据名称获取cookie
l返回值:
如果找到了就返回cookie;否则返回none
l使用示例:
driver.get_cookie("my_cookie")
get_cookies()
查找当前会话中所有的cookies
l返回值:
如果找到了就返回一个dictionaries对象,包含所有cookies
l使用示例:
driver.get_cookies()
get_window_position()
获取当前浏览器窗口的坐标,是根据浏览器左上角和屏幕左上角的相对位置计算的
l返回值:
一个包含x、y坐标的字典对象。
l使用示例:
print driver.get_window_position()
get_window_position(windowHandle=“current“)
获取当前浏览器窗口的坐标,是根据浏览器左上角和屏幕左上角的相对位置计算的
l参数:
windowHandle:默认是当前窗口,也可以指定一个窗口的句柄
l返回值:
一个包含x、y坐标的字典对象。
l使用示例:
print driver.get_window_position()
get_window_size(windowHandle=“current“)
获取当前浏览器窗口的高度和宽度
l参数:
windowHandle:默认是当前窗口,也可以指定一个窗口的句柄
l返回值:
一个包含width、height的字典对象。
l使用示例:
print driver.get_window_size()
implicitly_wait(time_to_wait)
设置一个超时时间,隐式地等待元素的查找和命令的执行。每次会话中,这个函数只需要被调用一次。如果要设置execute_async_script函数的超时时间,参阅set_script_timeout函数。
l参数:
time_to_wait:超时时间,以秒为单位
l使用示例:
driver.implicitly_wait(30)
is_online()
判断浏览器是否在线。(我把网络断开了,返回值还是TRUE,谁能告诉我是怎么回事)
l返回值:
在线返回True,不在线返回false
l使用示例:
print driver.is_online()
maximize_window()
浏览器窗口最大化
l使用示例:
driver.maximize_window()
quit()
退出,并且关闭所有相关的窗口
l使用示例:
driver.quit()
refresh()
刷新当前页面
l使用示例:
driver.refresh()
save_screenshot(filename)
获取当前浏览器窗口的截图
l参数:
filename:保存截图的文件名,使用完整路径
l返回值:
如果有任何IOError,返回false;否则返回true
l使用示例:
driver.save_screenshot("/Screenshots/foo.png") driver.save_screenshot("D:/Screenshots/foo.png")
set_page_load_timeout(time_to_wait)
l参数:
time_to_wait:等待时间,以秒为单位
l使用示例:
driver.set_page_load_timeout(30)
set_script_timeout(time_to_wait)
设置等待execute_async_script函数执行javascript的时间,直到抛出错误
l参数:
time_to_wait:等待时间,以秒为单位
l使用示例:
driver.set_script_timeout(30)
set_window_position(x,y,windowHandle=“current“)
设置浏览器窗口的x、y坐标
l参数:
x:设置窗口位置的x坐标像素
y:设置窗口位置的y坐标像素
windowHandle:窗口的句柄,默认是当前窗口,也可以指定窗口
l使用示例:
driver.set_window_position(0,0)
set_window_size(width,height,windowHandle=“current“)
设置浏览器窗口的高度和宽度
l参数:
width:设置窗口位置的宽度像素值
height:设置窗口位置的高度像素值
windowHandle:窗口的句柄,默认是当前窗口,也可以指定窗口
l使用示例:
driver.set_window_size(800,600)
switch_to_active_element()
切换至焦点所在的元素,如果没有焦点,就切换至BODY
l使用示例:
driver.switch_to_active_element()
switch_to_alert()
把焦点切换至页面上的一个弹出框
l使用示例:
driver.switch_to_alert()
switch_to_default_content()
把焦点切换至默认的frame上
l使用示例:
driver.switch_to_default_content()
switch_to_frame(frame_reference)
把焦点切换至特定的frame中,可以根据id、name、webelement指定frame
l参数:
frame_reference:可以是frame的名称,也可以是frame的序号,也可以是一个iframe元素
l使用示例:
driver.switch_to_frame("frame_name") driver.switch_to_frame(1) driver.switch_to_frame(driver.find_elements_by_tag_name("iframe")[0])
switch_to_window(window_name)
把焦点切换至特定的窗口中
l参数:
window_name:可以是窗口的名称也可以是窗口的句柄
l使用示例:
driver.switch_to_window("main") driver.switch_to_window(driver.window_handles[1])
Webdriver属性
application_cache
获取一个ApplicationCache对象,来跟浏览器缓存进行交互
l使用示例:
driver.application_cache
current_url
获取当前url
l使用示例:
driver.current_url
current_window_handle
获取当前窗口的句柄
l使用示例:
Main_window=driver.current_window_handle
name
获取当前运行实例的底层浏览器的名称
l使用示例:
print driver.name
Page_source
获取当前页面的源代码
l使用示例:
driver.page_source#要print的人请自重,网页较大时不是一般的卡
title
获取当前页面的标题
l使用示例:
Print driver.title
Window_handles
获取当前会话中所有的窗口句柄
l返回值:
一个list,包含所有窗口句柄
l使用示例:
Print driver.title