zoukankan      html  css  js  c++  java
  • 通过服务器获取验证码

    测试自动化在遇见有验证码的情况时通常的做法是:

    1. 去掉验证码

    2. 设置万能验证码

    3. 验证码识别技术

    4. 记录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:Butterflysandbox' 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)

    运行结果为:

    _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
    ', '')
    

     代码比较简单,不再赘述。原理简单说就是:将sessionid和验证码记录在日志文件中,调起浏览器后根据sessionid去浏览器中取出验证码即可

  • 相关阅读:
    Traefik使用
    kubernetes nfs-client-provisioner外部存储控制器
    基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡
    k8s-rabbitmq-(一)集群部署
    TabSet 实现拖动后并保存配置
    C# MD5加密
    VSS “vc6.0vssum.dat may be corrupt”错误
    C#编程基础笔记
    android.view.WindowLeaked的解决办法
    【转】java线程系列---Runnable和Thread的区别
  • 原文地址:https://www.cnblogs.com/Hebe/p/5383330.html
Copyright © 2011-2022 走看看