滑动验证
- 基于opencv实现的免费操作:
- pip install opencv-python
- 可能会存在滑动误差,需要手动调整
from playwright.sync_api import sync_playwright
import cv2
from urllib import request
def get_distance():
background = cv2.imread("background.png", 0)
gap = cv2.imread("gap.png", 0)
res = cv2.matchTemplate(background, gap, cv2.TM_CCOEFF_NORMED)
value = cv2.minMaxLoc(res)[2][0]
print(value)
return value * 278 / 360
def get_track(distance):
track = []
current = 0
mid = distance * 4 / 5
t = 0.2
v = 1
while current < distance:
if current < mid:
a = 4
else:
a = -3
v0 = v
v = v0 + a * t
move = v0 * t + 1 / 2 * a * t * t
current += move
track.append(round(move))
return track
with sync_playwright() as p:
bro = p.chromium.launch(headless=False)
page = bro.new_page()
page.goto('https://passport.jd.com/new/login.aspx?')
page.locator('//*[@id="loginname"]').fill('123456@qq.com')
page.wait_for_timeout(1000)
page.locator('//*[@id="nloginpwd"]').fill('123456@qq.com')
page.wait_for_timeout(1000)
page.locator('//*[@id="loginsubmit"]').click()
page.wait_for_timeout(2000)
bg_img_src = page.locator('.JDJRV-bigimg > img').get_attribute('src')
small_img_src = page.locator('.JDJRV-smallimg > img').get_attribute('src')
request.urlretrieve(bg_img_src, "background.png")
request.urlretrieve(small_img_src, "gap.png")
distance = int(get_distance())
slide = page.locator('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[2]/div[3]')
box = slide.bounding_box()
page.mouse.move(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
page.mouse.down()
x = box["x"] + 12
tracks = get_track(distance)
for track in tracks:
page.mouse.move(x + track, 0)
x += track
page.mouse.up()
page.wait_for_timeout(5000)
page.close()
bro.close()
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='15027900535', pwd='15027900535', img=imgPath, typeid=imgType)
return result
from playwright.sync_api import sync_playwright
import tujian
from urllib import request
def get_track(distance):
track = []
current = 0
mid = distance * 4 / 5
t = 0.2
v = 1
while current < distance:
if current < mid:
a = 4
else:
a = -3
v0 = v
v = v0 + a * t
move = v0 * t + 1 / 2 * a * t * t
current += move
track.append(round(move))
return track
with sync_playwright() as p:
bro = p.chromium.launch(headless=False)
page = bro.new_page()
page.goto('https://passport.jd.com/new/login.aspx?')
page.locator('//*[@id="loginname"]').fill('123456@qq.com')
page.wait_for_timeout(1000)
page.locator('//*[@id="nloginpwd"]').fill('123456@qq.com')
page.wait_for_timeout(1000)
page.locator('//*[@id="loginsubmit"]').click()
page.wait_for_timeout(2000)
bg_img_src = page.locator('.JDJRV-bigimg > img').get_attribute('src')
request.urlretrieve(bg_img_src, "background.png")
distance = tujian.getImgCodeText('background.png',33)
distance = int(distance)
slide = page.locator('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[2]/div[3]')
box = slide.bounding_box()
page.mouse.move(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
page.mouse.down()
x = box["x"]
tracks = get_track(distance)
for track in tracks:
page.mouse.move(x + track, 0)
x += track
page.mouse.up()
page.wait_for_timeout(5000)
page.close()
bro.close()
文字点击验证码处理
from playwright.sync_api import sync_playwright
import tujian
from urllib import request
with sync_playwright() as p:
bro = p.chromium.launch(headless=False)
page = bro.new_page()
page.goto('https://passport.bilibili.com/login?from_spm_id=333.851.top_bar.login_window')
page.locator('//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[1]/input').fill('15027900535')
page.wait_for_timeout(1)
page.locator('//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[3]/input').fill('bobo@123.com')
page.wait_for_timeout(1)
page.locator('//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[2]/div[2]').click()
page.wait_for_timeout(3)
ele = page.locator('//div[@class="geetest_widget"]')
ele.screenshot(path='./code.png')
box = ele.bounding_box()
result = tujian.getImgCodeText('code.png',27)
result_list = result.split('|')
for pos in result_list:
x = int(pos.split(',')[0])
y = int(pos.split(',')[1])
page.mouse.click(box['x']+x,box['y']+y)
page.wait_for_timeout(500)
submit = page.locator('//div[@class="geetest_commit_tip"]')
submit.click()
page.wait_for_timeout(5000)
page.close()
bro.close()