安装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()
|
这个应用主要是为了解决工作中的问题。
由于每天我们都要测试网站邮箱发信是否正常。所以就开发了这个应用来自动化帮助我们处理工作事宜。
代码不是很完善,并未做封装优化,仅仅只是实现功能。仅供大家参考。
注:本文内容均系原创。如需转载分享请标明出处。
注:本文内容均系原创。如需转载分享请标明出处。