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 @   多测师_树哥  阅读(712)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示