#Python系列#--Python结合Selenium和PhantomJS实现自动化测试

user

雨橙

中国.四川.成都

世界之上、唯有远见、惟爱不变。


安装Selenium和chromedriver
 
1. Selenium下载与安装
1).下载
https://pypi.python.org/packages/source/s/selenium/selenium-2.35.0.tar.gz
点击这里下载
 
2).解压后安装
python setup.py install

 
2. chromedriver下载与配置
1).下载
http://chromedriver.storage.googleapis.com/2.2/chromedriver_win32.zip
点击这里下载
 
2).下载后解压到c:\python27目录下
 
3).配置
系统变量path里添加c:\python27

 
3. python测试
#coding:utf-8
from selenium import webdriver
b = webdriver.Chrome(r"c:/python27/chromedriver.exe")
b.get("http://www.baidu.com")
b.find_element_by_id("kw").send_keys(u"头脑王者")
b.find_element_by_id("su").click()
 
 
PhantomJS载与安装
1. PhantomJS下载
官方下载地址:http://phantomjs.org/download.html
点击这里下载
 
 
2. 配置安装
然后解压。设置系统环境变量。开始-运行-输入cmd。
测试输入phantomjs --version 查看版本号
 
 
第一步:构建phantomjs应用实现数据自动化提交
#构建应用
phantomjsURL = "/Tools/phantomjs-2.1.1-windows/phantomjs-2.1.1-windows/bin/phantomjs.exe"
driver = webdriver.PhantomJS(executable_path=phantomjsURL)
#获取节点开始提交
driver.get('http://4g.ztt120.com/ynxw/')
driver.find_element_by_xpath('//*[@id="name"]').send_keys('tester_4g.ztt120.com')
driver.find_element_by_xpath('//*[@id="hometel"]').send_keys('13888888888')
driver.find_element_by_xpath('//*[@id="form"]/div/div[4]/input[1]').click()
sreach_window = driver.current_window_handle
 
#数据自动提交成功以后。需要去打开邮箱查看信息是否发送成功。
 
下一步:登陆阿里云邮箱
driver.get('https://mailsso.mxhichina.com/login.htm?app_code=smartmail&lang=zh_CN&network_env=1')
    driver.find_element_by_xpath('//*[@id="username"]').clear()
    driver.find_element_by_xpath('//*[@id="password"]').clear()
    driver.find_element_by_xpath('//*[@id="username"]').send_keys('youremailname@x.com')
    driver.find_element_by_xpath('//*[@id="password"]').send_keys('yourpassword')
    driver.find_element_by_xpath('//*[@id="login_submit_btn"]').click()
    sreach_window = driver.current_window_handle

    try:
        dr = WebDriverWait(driver,10)
        if driver.find_element_by_xpath('//*[@id="root_nav_ding"]'):
            driver.find_element_by_xpath('//*[@id="header_wrap"]/div[3]/div[3]').click()
            print(u'点击进入邮箱')
    except:
        time.sleep(5)
        driver.find_element_by_xpath('//*[@id="login_checkcode_ico"]').click()
        time.sleep(5)
        driver.save_screenshot('screen_shoot.jpg')
阿里云采用了验证码登陆。这里先获取网页截图。
 
接下来开始裁剪网页图片。把验证码截取出来
#PIL裁剪图片
img = Image.open("screen_shoot.jpg")
yzm_box = (198,147,300,178)
yzm_img = img.crop(yzm_box)
yzm_img.save("yzm.jpg")
下面开始使用百度AI库识别验证码
#验证码识别
from aip import AipOcr
APP_ID = '1074446'
API_KEY = 'M73AwH6k1rpXCD74rH'
SECRET_KEY = 'G4DlGIW9vbcCLuLN6EE5vgNt1'
def get_img_content(img_filepath):
	with open(img_filepath,"rb") as f:
		return f.read()

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
img = get_img_content("yzm.jpg")
res = client.basicGeneral(img)

str = ""
for line in res:
	if type(res[line]) == list:
		words = res[line]
		for x in words:
			str = str+x["words"]+","
			print x["words"]

yzm = str[:-1]

 
注意:
这里使用了百度AI库。这个对于验证码的识别准确度不是很高。需要多次运行才能识别出来。有一定的效率问题。
我建议使用google Tesseract-ocr工具训练。这样训练出来的验证识别效率准确度都比较高。
 
成功识别验证码后开始登陆邮箱
#成功识别验证码后登陆
driver.find_element_by_xpath('//*[@id="login_checkcode"]').send_keys(yzm)
driver.find_element_by_xpath('//*[@id="login_submit_btn"]').click()
time.sleep(10)
driver.save_screenshot('screen_shoot1.jpg')


if driver.find_element_by_xpath('//*[@id="root_nav_ding"]'):
	driver.maximize_window()
	print(u"已经打开邮箱中转页面。。。请稍等。。。")
	time.sleep(2)
	driver.find_element_by_xpath('//*[@id="header_wrap"]/div[3]/div[3]').click()
	time.sleep(10)

 
然后开始抓图保存下来作为日志报告
driver.find_element_by_xpath('//*[@id="sqm_71"]/div/div').click()
time.sleep(10)
driver.save_screenshot('screen_shoot2.jpg')
os.system("mspaint screen_shoot2.jpg")
 
功能就到此完成了。
 
下面是完整代码我贴出来:
#!/usr/bin/pythyon
# _*_ coding:utf-8 _*_
# author: Robinn

import os
import sys
import time
from PIL import Image
from io import BytesIO
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

reload(sys)
sys.setdefaultencoding("utf-8")

#构建应用
phantomjsURL = "C:/Users/admin/Desktop/demos/Tools/phantomjs-2.1.1-windows/phantomjs-2.1.1-windows/bin/phantomjs.exe"
driver = webdriver.PhantomJS(executable_path=phantomjsURL)


#开始提交
driver.get('http://4g.ztt120.com/ynxw/')  #4g.ztt120.com
driver.find_element_by_xpath('//*[@id="name"]').send_keys('tester_4g.ztt120.com')
driver.find_element_by_xpath('//*[@id="hometel"]').send_keys('13888888888')
driver.find_element_by_xpath('//*[@id="form"]/div/div[4]/input[1]').click()
sreach_window = driver.current_window_handle


print(u"发送测试完成。正常运行。无异常。")
driver.quit()
driver = webdriver.PhantomJS(executable_path=phantomjsURL)

#打开邮箱服务
while True:
    driver.get('https://mailsso.mxhichina.com/login.htm?app_code=smartmail&lang=zh_CN&network_env=1')
    driver.find_element_by_xpath('//*[@id="username"]').clear()
    driver.find_element_by_xpath('//*[@id="password"]').clear()
    driver.find_element_by_xpath('//*[@id="username"]').send_keys('youremailname@x.com')
    driver.find_element_by_xpath('//*[@id="password"]').send_keys('yourpassword')
    driver.find_element_by_xpath('//*[@id="login_submit_btn"]').click()
    sreach_window = driver.current_window_handle

    try:
        dr = WebDriverWait(driver,10)
        if driver.find_element_by_xpath('//*[@id="root_nav_ding"]'):
            driver.find_element_by_xpath('//*[@id="header_wrap"]/div[3]/div[3]').click()
            print(u'点击进入邮箱')
    except:
        time.sleep(5)
        driver.find_element_by_xpath('//*[@id="login_checkcode_ico"]').click()
        time.sleep(5)
        driver.save_screenshot('screen_shoot.jpg')


        #PIL裁剪图片
        img = Image.open("screen_shoot.jpg")
        yzm_box = (198,147,300,178)
        yzm_img = img.crop(yzm_box)
        yzm_img.save("yzm.jpg")



        #验证码识别
        from aip import AipOcr
        APP_ID = '1070446'
        API_KEY = 'M73AwH6k1rpxdGEjXCD74rH'
        SECRET_KEY = 'G4DlQ4GIW9vbcBQCLybuL6EE5evgNt1'
        def get_img_content(img_filepath):
            with open(img_filepath,"rb") as f:
                return f.read()

        client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
        img = get_img_content("yzm.jpg")
        res = client.basicGeneral(img)

        str = ""
        for line in res:
            if type(res[line]) == list:
                words = res[line]
                for x in words:
                    str = str+x["words"]+","
                    print x["words"]

        yzm = str[:-1]
        #成功识别验证码后登陆
        driver.find_element_by_xpath('//*[@id="password"]').send_keys('yourpassword')
        driver.find_element_by_xpath('//*[@id="login_checkcode"]').send_keys(yzm)
        driver.find_element_by_xpath('//*[@id="login_submit_btn"]').click()
        time.sleep(10)
        driver.save_screenshot('screen_shoot1.jpg')

        try:
            if driver.find_element_by_xpath('//*[@id="root_nav_ding"]'):
                driver.maximize_window()
                print(u"已经打开邮箱中转页面。。。请稍等。。。")
                time.sleep(2)
                driver.find_element_by_xpath('//*[@id="header_wrap"]/div[3]/div[3]').click()
                time.sleep(10)
                break
        except:
            continue

driver.find_element_by_xpath('//*[@id="sqm_71"]/div/div').click()
time.sleep(10)
driver.save_screenshot('screen_shoot2.jpg')
os.system("mspaint screen_shoot2.jpg")


#退出应用
sys.exit(0)
driver.quit()

 
这个应用主要是为了解决工作中的问题。
由于每天我们都要测试网站邮箱发信是否正常。所以就开发了这个应用来自动化帮助我们处理工作事宜。
代码不是很完善,并未做封装优化,仅仅只是实现功能。仅供大家参考。

注:本文内容均系原创。如需转载分享请标明出处。
posted at