• 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()
     
  • 相关阅读:
    Codeforces 758D:Ability To Convert(思维+模拟)
    Codeforces 758B:Blown Garland(模拟)
    BZOJ-1053 反素数
    BZOJ-1024 生日快乐
    BZOJ-1036 树的统计
    BZOJ-1029 建筑抢修
    BZOJ-1059 矩阵游戏
    BZOJ-1026 windy数
    BZOJ-1019 汉诺塔
    BZOJ-1031 字符加密
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13110233.html
Copyright © 2020-2023  润新知