webdriver
Selenium是ThroughtWorks公司开发的一套Web自动化测试工具。
它分为三个组件:
1
2
3
|
Selenium IDE
Selenium RC (Remote Control)
Selenium Webdriver
|
Selenium IDE:是firefox的一个插件,允许测试人员录制脚本并回放。
Selenium RC和Selenium Webdriver:是测试框架,提供多种语言的API。
不同的是,Selenium Webdriver以一种更底层、更灵活的方式来操作浏览器,并不仅仅使用JavaScript。这样它可以绕开浏览器的沙箱限制,实现Selenium RC不支持的框架、弹出窗口、页面导航、下拉菜单、基于AJAX的UI元素等控件的操作。而且,Selenium Webdriver不需要本地服务器。
Selenium 1.x版本只包含前两个组件。从2.0开始Webdriver加入其中。
主要是来解决https的加密问题
Webdriver在使用之前,需要下载一个浏览器所对应用的驱动插件,请根据自己不同的浏览器版本,进行下载:
百度搜:
进入网站:
http://npm.taobao.org/mirrors/chromedriver/
下载以后,并把chromdriver放在chrome的google.exe的目录下面
先安装selenium
1
|
# pip install selenium
|
自动打开chrome,并打开域名相关的网页
1
2
3
4
5
6
7
8
9
10
|
import
os
import
time
from
selenium
import
webdriver
from
selenium.webdriver.common.keys
import
Keys
chromedriver
=
"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
os.environ[
"webdriver.chrome.driver"
]
=
chromedriver
driver
=
webdriver.Chrome(chromedriver)
driver.get(
"http://www.python.org"
)
time.sleep(
100
)
driver.quit()
|
执行:自动打开网页
搜索栏(Search)的代码如下:
id="id-search-field" 是 Search 的唯一标识符。
id="submit" 是按钮“GO”的唯一标识符。
让页面自动搜索关键字,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import
os
import
time
from
selenium
import
webdriver
from
selenium.webdriver.common.keys
import
Keys
chromedriver
=
"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
os.environ[
"webdriver.chrome.driver"
]
=
chromedriver
driver
=
webdriver.Chrome(chromedriver)
driver.get(
"http://www.python.org"
)
element
=
driver.find_element_by_id(
"id-search-field"
)
element.clear()
element.send_keys(
"os"
)
elementsubmit
=
driver.find_element_by_id(
"submit"
)
elementsubmit.click()
time.sleep(
10000
)
driver.quit()
|
结果如图:
学习几种选择器:
1. find_elements_by_name(“test”) # 根据name定位
页面:
<input type="text" name="passwd" id="passwd-id" class=”input-class”/>
代码:
element = driver.find_elements_by_name(“passwd”)
2. find_elements_by_id() #根据ID定位,定位最准确
element = driver.find_element_by_id(“passwd-id”)
By.tagname()
element = driver.find_element_by_tag_name(“input”)
3. find_element_by_class_name(‘input-class’) #根绝class定位
4. find_elements_by_tag_name(‘iframe’) #根据元素定位
这里以iframe举例:用Tag name 定位元素
例子:
检查页面获得如下:
<iframe src="... ..."> xxxxxxx </iframe>
element = driver.find_elements_by_tag_name("iframe")
【iframe 就是定位行的元素】
5. find_element_by_link_text() #通过链接文字定位
页面:
<a href="http://www.google.com/search?q=baidu">baidu</a>
代码:
element = browser.find_elements_by_link_text("baidu")
6. xpath
这个特别强大,所有的元素都可以通过这个可以找到。
XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。
1
2
3
4
5
6
7
8
9
10
11
|
绝对路径: 根元素开始,及html开始用/
相对路劲: 任意符合条件的元素
//
查找页面上所有的input元素:
//input
查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示,单/号):
//form
[1]
/input
查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双
//
号):
//form
[1]
//input
查找页面上第一个form元素:
//form
[1]
查找页面上
id
为loginForm的form元素:
//form
[@
id
=
'loginForm'
]
查找页面上具有name属性为username的input元素:
//input
[@name=
'username'
]
查找页面上
id
为loginForm的form元素下的第一个input元素:
//form
[@
id
=
'loginForm'
]
/input
[1]
查找页面具有name属性为contiune并且
type
属性为button的input元素:
//input
[@name=
'continue'
][@
type
=
'button'
]
查找页面上
id
为loginForm的form元素下第4个input元素:
//form
[@
id
=
'loginForm'
]
/input
[4]
|
控件操作:
输入框;
element.clear() #清空输入框数据
element.sendkeys(“username”) #发送数据
element.text #获取元素文本的值
按钮:
element.click() #"点击"操作
element.submit() #同.click(),操作相同,常用 .click()
单选和多选框
element.clear()
element = browser.find_elements_by_id(' checkbox') #也可能是其他,根据具体情况,选择关键字元素即可。
##选择某个单选项:
element.click();
常用方法:
browser.get_cookies()
browser.title #头名字
browser.close()
.forward() #前进
举例:
browser.foeward()
.back() #后退
举例:
browser.back()
.refresh() #刷新
举例:
browser.refresh()
.current_url #返回当前页面url
举例:
browser.current_url
实例1:登录12306
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from
selenium
import
webdriver
import
random
import
time
def
randomSleep(minS, maxS):
time.sleep((maxS
-
minS)
*
random.random()
+
minS)
browser
=
webdriver.Chrome(r
"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
)
url
=
"https://kyfw.12306.cn/otn/login/init"
browser.get(url
=
url)
print
(browser.find_element_by_id(
"username"
).text)
browser.find_element_by_id(
"username"
).clear()
browser.find_element_by_id(
"username"
).send_keys(
"xxxxxxxxxx"
)
randomSleep(
2
,
5
)
browser.find_element_by_id(
"password"
).send_keys(
"xxxxxxxxx"
)
randomSleep(
1
,
4
)
time.sleep(
6
)
browser.find_element_by_id(
"loginSub"
).click()
randomSleep(
2
,
5
)
print
(browser.get_cookies())
browser.quit()
|
#除验证码要手动确认外,其他全自动完成。
实例2:登录京东(重点在xpath选择器的用法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
from
selenium
import
webdriver
import
random
import
time
def
randomSleep(minS, maxS):
time.sleep((maxS
-
minS)
*
random.random()
+
minS)
browser
=
webdriver.Chrome(r
"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
)
# Home
browser.get(
"https://passport.jd.com/new/login.aspx"
)
# Login by username and password
randomSleep(
1
,
2
)
browser.find_element_by_xpath(
"//a[@clstag='pageclick|keycount|201607144|2']"
).click()
# Username and password
randomSleep(
1
,
2
)
browser.find_element_by_id(
"loginname"
).send_keys(
"xxxxxxxx"
)
#用户
print
(browser.find_element_by_id(
"loginname"
).text)
randomSleep(
1
,
3
)
browser.find_element_by_id(
"nloginpwd"
).send_keys(
"xxxxxxx"
)
#密码
# Submit, wait for a long time
randomSleep(
5
,
10
)
browser.find_element_by_id(
"loginsubmit"
).click()
print
(browser.get_cookies())
randomSleep(
3
,
5
)
browser.quit()
|