import asyncio
from pyppeteer import launch
from pyppeteer.errors import TimeoutError
import random
import base64
import json
import requests
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
base64_data = base64.b64encode(f.read())
b64 = base64_data.decode()
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
if result['success']:
return result["data"]["result"]
else:
#!!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别
return result["message"]
return ""
def getImgCodeText(imgPath,imgType):
result = base64_api(uname='88888',pwd='88888',img = imgPath,typeid=imgType)
return result
async def main():
browser = await launch({
"headless":False,
"args":['--window-size=1920,1080'],
# "defaultViewport": {
# "width": 1920,
# "height": 1080,
# },
})
page= await browser.newPage()
await page.setViewport({"width":1920,"height":1080})
await page.goto("https://passport.bilibili.com/login")
await page.type('input[placeholder="请输入账号"]',"88888",{
"delay":random.randint(30,60)
})
await page.type('input[placeholder="请输入密码"]',"989565665",{
"delay":random.randint(30,60)
})
await page.click('div[class="btn_primary "]')
try:
await page.waitForSelector('.geetest_item.geetest_big_item', timeout=30000)
ele = await page.J(".geetest_big_item")
await page.waitFor(3000)
await ele.screenshot({'path':'code.png'})
await page.waitFor(3000)
result =getImgCodeText('./code.png',27)
print(result)
result_list=result.split('|')
print("result_list:::",result_list)
code_box = await page.querySelector('.geetest_item.geetest_big_item')
print("code_box:::", code_box)
code_box_info=await code_box.boundingBox()
print("code_box_info:::", code_box_info)
for pos in result_list:
x = int(pos.split(',')[0])
y=int(pos.split(',')[1])
print("x,y:::",x,y)
x= code_box_info['x']+x
y= code_box_info['y']+y
await page.mouse.move(x,y)
await page.mouse.down()
await page.waitFor(3000)
await page.mouse.up()
await page.waitFor(3000)
await page.click('.geetest_commit')
await page.waitFor(3000)
finally:
print("ok")
await browser.close()
asyncio.run(main())哔哩哔哩网站的验证码破解实现原理。记着我使用的是图鉴,你记着把里面的用户名和密码更换一下就行了。
还有其他免费 的方式github上有就不介绍了
