特点
延迟计算:返回的值是异步获取的,可以通过 `await` 等待其完成。
使用 `async` 和 `await`:异步迭代器通常需要配合 `async` 和 `await` 关键字来使用。
支持异步 for 循环:你可以使用 `async for` 来迭代异步迭代器,这样就能在异步环境中逐个获取值。
基本使用
创建异步迭代器
一个简单的异步迭代器通常需要实现__aiter__() 和__anext__() 方法。
import asyncio
cla
from DrissionPage import Chromium, ChromiumOptions
class New_Chromium(Chromium):
def __new__(cls, addr_or_opts=None, session_options=None):
return super(New_Chromium, cls).__new__(cls, addr_or_opts, session_options)
def __init__(self, addr_or_opts=None, session_options=None, *args, **kwargs):
super(New_Chromium, self).__init__(a
1、模块
# myclass.py
class MyClass:
obj = None
def __init__(self, name, age):
self.name = name
self.age = age
obj = MyClass('Alice', 25)
# temp.py
from myclass import obj
from myclass import obj
2、类装饰器
def singleton(cls):
instances = {}
def get_ins
地址:aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLyMvVGV4dFRyYW5zbGF0ZQ==
自行根据断点跟栈调试
关键sign加密算法js原代码:
return _(`client=${d}&mysticTime=${e}&product=${u}&key=${t}`)
关键解密js原代码:
const a = da.A.decodeDat
playwright版
使用教程參考:playwright异步通过滑动验证码实例|支持多线程
async def human_like_slide(page, slider_btn, move_distance):
"""
模拟人工操作轨迹拖动滑块
:param page: 可操作的页面对象
:param slider_btn: 可操作的滑块对象
:param move_distance: 移动距离,单位为像素
"""
move_distance = move_distance
# 获取滑块的中心
1、图片采集
下面使用的多开软件,没有软件的执行使用本地驱动,修改start_browser里面的代码,改变 p.chromium.connect_over_cdp 方式,自行去实现多开逻辑
下面采集了6个不同地址的验证码图片共1150张
截图标准:可以把整个验证码块全局截取,包括刷新按钮和滑块位置,如下:
说在前面:
1、整个过程中某下包最好使用国内镜像源安装,临时使用清华镜像源命令:
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
2、整个过程不能用国内镜像源的,复制下载链接到迅雷下载会快N倍,比如下载CUDA、cuDNN、torch等的时候
1、安装驱动
显卡驱动根据显卡型号下载安装
驱动下载地址:
获取缺块位置的函数 cv2_get_x() 采用 opencv 的模板匹配,不是特别精准,复杂场景通过率很低,如果要提高精准度可以训练模型,其中 yolo_get_x() 采用的是训练的模型,至于如何训练自己的模型可以参考:从0-1训练自己的滑动验证码识别模型
import asyncio
import os
import random
import uuid
from threading import Thread
import cv2
import requests
impor
准备工作
图片
我是在 img 下放置了 2000 张用于训练的验证码图片,图片格式为 {code}_{num}.jpg,其中 code 为图片对应验证码,num 为数字序号,避免重名的。
然后把需要预测的图片放在 predict
进程通信
管道(Pipes)
os.pipe():创建一个管道,用于父子进程之间的通信。
multiprocessing.Pipe():创建一个双向管道,用于进程间的通信。
import multiprocessing
def child_proc(pipe):
pipe.send("从子进程访问!")
pipe.close()
if __name__ == "__main__":
parent_conn, child_conn = multiprocessing.Pipe()
p = multiprocessing.Process(target=chi