油猴自动填写验证码,包括用户名和密码
环境
- Mac
- Django
- Python3.8.10
- Tampermonkey
油猴脚本内容
(function () {
"use strict";
let requestUrl = "http://10.44.97.228:800";
addLoadEvent(testXpath);
function testXpath() {
getElementByXpath(
"/html/body/div[1]/div[2]/div[2]/div[1]/div[3]/button[1]"
).onclick = function () {
setTimeout(function () {
log();
}, 1000);
};
getElementByXpath(
"/html/body/div[1]/div[1]/div[2]/div/div/form/div[3]/a/img"
).onclick = function () {
setTimeout(function () {
log(1);
}, 1000);
};
}
function log(a = 0) {
var imgData, response;
console.log("开始了!");
var element = getElementByXpath(
"/html/body/div[1]/div[2]/div[2]/div[1]/div[2]/div[2]/span/select"
);
var index = element.selectedIndex;
if (a === 0) {
var name = element.options[index].text;
} else {
var element = getElementByXpath(
"/html/body/div[1]/div[1]/div[2]/div/div/div[1]/div[2]/button/text()"
);
var name = element.textContent
.replace(/^\s\s*/, "")
.replace(/\s\s*$/, "");
}
var img_ele = getElementByXpath(
"/html/body/div[1]/div[1]/div[2]/div/div/form/div[3]/a/img"
);
console.log(img_ele.src);
imgData = getCode(img_ele);
console.log("图片长度:" + imgData.length);
response = reqobj(name, imgData);
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != "function") {
window.onload = func;
} else {
window.onload = function () {
oldonload();
func();
};
}
}
function getElementByXpath(xpath) {
var element = document.evaluate(xpath, document).iterateNext();
return element;
}
function getCode(img) {
var imgBase64;
imgBase64 = ConversionBase(img).toDataURL("image/png");
var pastDate =
"img=" + encodeURIComponent(imgBase64.replace(/.*,/, "").trim());
return pastDate;
}
function ConversionBase(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
return canvas;
}
function write(data) {
var selector;
console.log("开始填写验证码");
selector = document.querySelector.bind(document);
let uname = selector(
"div#login_main > div > form > div:nth-of-type(1) > div > div > input"
);
let upswd = selector(
"div#login_main > div > form > div:nth-of-type(2) > div > div > input"
);
let yanzhengma = selector(
"div#login_main > div > form > div:nth-of-type(3) > div > div > input"
);
uname.value = data.uname;
upswd.value = data.upswd;
yanzhengma.value = data.data;
var event = new Event("input", {
bubbles: true,
cancelable: true,
});
uname.dispatchEvent(event);
upswd.dispatchEvent(event);
yanzhengma.dispatchEvent(event);
}
function reqobj(name, img) {
var url = requestUrl + "/code";
var Results;
console.log("开始识别验证码");
GM_xmlhttpRequest({
url: url,
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
path: window.location.href,
},
data: img + "&name=" + name,
responseType: "json",
onload: (obj) => {
var data = obj.response;
console.log(data);
if (data.code === 200) {
console.log("请求成功!");
write(data);
} else {
console.log("请求错误!");
}
},
onerror: (err) => {
console.log(err);
},
});
console.log(Results);
return Results;
}
})();
django内容
import ddddocr
from django.http import JsonResponse
def code(request):
def dddd_ocr(img):
ocr = ddddocr.DdddOcr(old=True, show_ad=False)
res = ocr.classification(img)
return res
try:
img = request.POST['img']
name = request.POST['name'].replace(' ', '')
data = {
"code": 200,
"data": dddd_ocr(img),
"msg": "成功!",
}
except FromData.DoesNotExist:
data = {"code": 201}
return JsonResponse(data, safe=False)
return JsonResponse(data, safe=False)
Gitee
https://gitee.com/hayratjan/
Github
https://github.com/hayratjan/
赞赏
![赞赏](https://img-blog.csdnimg.cn/40cc4e962df540d38729cdad5870788a.png)