經過服務器獲取驗證碼

測試自動化在碰見有驗證碼的狀況時一般的作法是:python

1. 去掉驗證碼web

2. 設置萬能驗證碼瀏覽器

3. 驗證碼識別技術tomcat

4. 記錄cookie服務器

 

以上方法各有優缺點,這裏再也不贅述,只簡單介紹一種不用任何改動簡單有效不影響流程的方法,直接上源碼:cookie

 

# -*- coding:utf-8 -*-
# Python27 import paramiko,datetime import selenium.webdriver as webdriver # 鏈接服務器獲取驗證碼 def getpin(sessionid): hostname = '111.111.111.111' port = 8989 username = 'testname' key_file = 'D:\Butterfly\sandbox' date = datetime.datetime.now().strftime('%Y-%m-%d') key = paramiko.RSAKey.from_private_key_file(key_file) sessionid = sessionid s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) s.connect(hostname,port,username,pkey=key,timeout=5) cmd = "tac /opt/tomcat/logs/catalina." + date + ".out | grep " + sessionid + ":validateCode | sed -n '1p'" print cmd stdin,stdout,stderr = s.exec_command(cmd) cmd_result = stdout.read(),stderr.read() print cmd_result for line in cmd_result: if line : pincode = line[-5:-1] s.close() return pincode # 打開瀏覽器獲取session driver = webdriver.Chrome() driver.get('https://new.xxx.com/') cookies = driver.get_cookies() for cookie in cookies: print "%s -> %s" % (cookie['name'], cookie['value']) if cookie['name'] == 'JSESSIONID': sessionid = cookie['value'] if sessionid: print "sessionid is :" + sessionid pincode = getpin(sessionid) else: print "獲取session失敗" # 頁面信息填寫 driver.find_element_by_id("mobile").send_keys("18122223333") driver.find_element_by_id("password").send_keys("11111111") driver.find_element_by_id("validateCode").send_keys(pincode)

 

運行結果爲:session

_check_code_loginregister -> 1460449532856
JSESSIONID -> 11A50AF9CF61E4EA541B4AE6BE516D20-n1
Hm_lvt_04da9d36c446fb5cac2ee84477faa8e8 -> 1460449432
Hm_lpvt_04da9d36c446fb5cac2ee84477faa8e8 -> 1460449432
sessionid is :11A50AF9CF61E4EA541B4AE6BE516D20-n1
tac /opt/tomcat/logs/catalina.2016-04-12.out | grep 11A50AF9CF61E4EA541B4AE6BE516D20-n1:validateCode | sed -n '1p'
('2016-04-12 16:25:33,351 [http-bio-8080-exec-2] INFO  com.gamaxpay.website.util.VerifyCodeServlet - 11A50AF9CF61E4EA541B4AE6BE516D20-n1:validateCode:https://new.mo9.com/verifyCodeServlet:5TBV\n', '')

 代碼比較簡單,再也不贅述。原理簡單說就是:將sessionid和驗證碼記錄在日誌文件中,調起瀏覽器後根據sessionid去瀏覽器中取出驗證碼便可測試

相關文章
相關標籤/搜索