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到当前的会话。

l参数:

cookie_dict:字典对象,必要的keys“name”“value”,可选的keyspath”, “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_idweb对象(有用吗?)

delete_all_cookies()

删除会话范围内所有的cookies

l使用示例:

driver.delete_all_cookies()

delete_cookie(name)

删除会话中指定名称为内namecookie

l使用示例:

driver.delete_cookie("my_cookie")

execute(driver_command,params=None)

发送一个由command.CommandExecutor执行的命令

l参数:

driver_command:命令的名称,string类型

params:命令的参数,dictionary对象,可包括多个参数

l返回值:命令执行完毕的JSON响应,加载到一个dictionary对象

l使用示例:其实很多WebdriverAPI都是基于这个函数封装的,如通用查找函数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:查找元素的方法,包括idnamelink textxpathclass name…

value:需要查找的内容

l返回值:找到就返回元素的对象;找不到的话抛出异常

l使用示例:

driver.find_element("name","element_name")#注意两个参数都要加引号


find_element_by_*(args)

包括一批查找元素的方法,它们比较类似,所以一起写了。包括idnameclass_namecss_selectorlink_textpartial_link_textxpath,以后将在如何查找页面元素的博文里详细讲解

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:查找元素的方法,包括idnamelink textxpathclass 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返回值:

一个包含xy坐标的字典对象。

l使用示例:

print driver.get_window_position()

get_window_position(windowHandle="current")

获取当前浏览器窗口的坐标,是根据浏览器左上角和屏幕左上角的相对位置计算的

l参数:

windowHandle:默认是当前窗口,也可以指定一个窗口的句柄

l返回值:

一个包含xy坐标的字典对象。

l使用示例:

print driver.get_window_position()

get_window_size(windowHandle="current")

获取当前浏览器窗口的高度和宽度

l参数:

windowHandle:默认是当前窗口,也可以指定一个窗口的句柄

l返回值:

一个包含widthheight的字典对象。

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")

设置浏览器窗口的xy坐标

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中,可以根据idnamewebelement指定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