selenium中处理动态验证码方法【多测师】

解决思路两种:
1.直接linux catalina.out读取:一分每10s轮询出现新的直接读取返回<br>
2.缓存注入cookie,先手动登录获取session 然后通过注入user,pwd 进cookie

import paramiko
import os
from time import sleep
class SSH(object):
 
    def __init__(self,host,port,user,pwd):
        self.host=host
        self.port=port
        self.user=user
        self.pwd=pwd
    """此方法是统计在登陆之前获取的服务日志code的数量"""
    def before_count(self,logfile_absolute_path):
        logfile_parentdir,logfile_name=os.path.split(logfile_absolute_path)
        shell="cd {}; cat {}|grep 动态验证码为".format(logfile_parentdir,logfile_name)
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(self.host,self.port,self.user,self.pwd)
        self.ssh=ssh
        stdin, stdout, stderr = self.ssh.exec_command(shell)
        res,err = stdout.readlines(),stderr.readlines()
        result = res if res else err
        return len(result)
    # """其实这样写不是最好办法,解决多行根本是paramiko执行机制,
    # 每次执行完ssh.exec_command()函数会自动回到session初始化root路径,多行建议以;分号隔开"""
    def ssh_connect(self,logfile_absolute_path,beforecode_number):
        target_code=""
        for i in range(6):
            logfile_parentdir,logfile_name=os.path.split(logfile_absolute_path)
            shell="cd {}; cat {}|grep 动态验证码为".format(logfile_parentdir,logfile_name)
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(self.host,self.port,self.user,self.pwd)
            self.ssh=ssh
 
            stdin, stdout, stderr = self.ssh.exec_command(shell)
            res,err = stdout.readlines(),stderr.readlines()
            result = res if res else err
 
            if len(result)> beforecode_number:
                var=result[-1].strip()
                a=var.split("-")[-1]
                target_code=a.split(r"")[-1].strip()
                break
            else:
                sleep(10)
            self.ssh.close()
        return target_code
cookie注入:python自动化解决验证码以及滑块验证跳过,拿QQ邮箱为例

# coding =utf-8
from selenium import webdriver
from time import sleep

def access_code():
    driver=webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.get("https://mail.qq.com/cgi-bin/frame_html?sid=X8TXPdLKi6bWUyB7&r=56ca1d8478e5e4903be3ecab133915c6")
    sleep(4)
    s = driver.get_cookie("u")
    print(s)
    cookie_log = driver.get_cookies()
    print(cookie_log)
    driver.add_cookie({'name': 'u', 'value': '15367496688'})
    """ add username cookie"""
    driver.add_cookie({'name':'p','value': 'qweqwe123'})
    """add  password cookie"""
    driver.get("https://mail.qq.com/cgi-bin/frame_html?sid=X8TXPdLKi6bWUyB7&r=56ca1d8478e5e4903be3ecab133915c6")
    driver.switch_to.frame("login_frame")
    driver.find_element_by_id("u").send_keys("15367496688")
    driver.find_element_by_id("p").send_keys("qweqwe123")
    driver.find_element_by_id("login_button").click()
    sleep(5)
    driver.close()
if __name__ == "__main__":
    access_code()

 

 

 
posted @ 2020-06-12 20:45  多测师_树哥  阅读(708)  评论(0编辑  收藏  举报