Selenium是ThroughtWorks公司开发的一套Web自动化测试工具。
它分为三个组件:
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在使用之前,需要下载一个浏览器所对应用的驱动插件,请根据自己不同的浏览器版本,进行下载:
这里使用的是谷歌浏览器,可以在网上进行搜索下载,并把chromdriver放在google.exe那个当前目录下面。
#导入模块
import os import time from selenium import webdriver #指定下载插件的位置 chromedriver = "c:\/users\youjianjun\AppData\Local\Google\Chrome\Application\chromedriver.exe" os.environ["webdriver.chrome.driver"] = chromedriver driver = webdriver.Chrome(chromedriver) #定义要访问的页面 url = "http://www.python.org"
#打开 driver.get(url)
#打开页面后停止3秒 time.sleep(3)
#关闭页面 driver.quit()
运行之后会自动打开浏览器并访问填写的URL,在停止3秒后,页面自动关闭。
2.当能够自动打开页面后,下一步需要做的就是登陆了,那么这时候就要用到‘选择器‘了,它可以定位到页面上的输入框,然后进行操作。
八种选择器:
1. find_elements_by_name(“test”)
页面:
代码:
element = driver.find_elements_by_name(“passwd”)
2. find_elements_by_id()
element = driver.find_element_by_id(“passwd-id”)
By.tagname()
element = driver.find_element_by_tagname(“input”)
3. find_element_by_class_name(‘input-class’)
4. find_elements_by_tag_name(‘iframe’)
DOM的Tag元素
用Tag name 定位元素的例子:
element = driver.find_elements_by_tag_name("iframe")
5. find_element_by_link_text()
页面:6 xpath 这个特别强大,所有的元素都可以通过这个可以找到。
XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。
绝对路径: 根元素开始,及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]
跟上面的一样,鼠标放到账户的输入框上,右键点击检查,下面就会显示,我们就可一进行定位了。
#导入模块
import os import random import time from selenium import webdriver #定义暂停时间 def Timesleep(min,max): time.sleep((max-min) * random.random() + min) #访问的网址 url = "https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F"
#插件位置 chromedriver = "c:\/users\youjianjun\AppData\Local\Google\Chrome\Application\chromedriver.exe" os.environ["webdriver.chrome.driver"] = chromedriver driver = webdriver.Chrome(chromedriver) #打开 driver.get(url=url)
#暂停1-2秒 Timesleep(1,2) #使用xpath定位到 ‘账户登录’ ,然后跳转。 driver.find_elements_by_xpath("//a[@clstag='pageclick|keycount|login_pc_201804112|10']")[0].click() Timesleep(1,2) #定位到账户的输入框 driver.find_element_by_id("loginname").clear() Timesleep(1,2) #向输入框中填入账户信息 driver.find_element_by_id("loginname").send_keys("账户信息") Timesleep(1,2) #定位密码的输入框 driver.find_element_by_id("nloginpwd").clear() Timesleep(1,2) #填入密码信息 driver.find_element_by_id("nloginpwd").send_keys("密码") Timesleep(1,2) #定位登录按钮,进行登录 driver.find_element_by_id("loginsubmit").click() Timesleep(5,10) #获取登录的cookies信息 print(driver.get_cookies()) #关闭 driver.quit()
运行之后可以看见,自动输入账户,密码,并进行登录。