1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| import random from pyppeteer import launch import asyncio import cv2 from urllib import request
async def get_track(): 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] return value * 278 / 360 - 13
async def main(): browser = await launch({ "headless": False, "args": ['--window-size=1366,768'], "executablePath" : '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' }) page = await browser.newPage() await page.setViewport({"width": 1366, "height": 768}) await page.goto("https://passport.jd.com/new/login.aspx?")
await page.type("#loginname", '', { "delay": random.randint(30, 60) }) await page.type("#nloginpwd", '', { "delay": random.randint(30, 60) })
await page.waitFor(2000) await page.click("div.login-btn") await page.waitFor(2000) img_src = await page.Jeval(".JDJRV-bigimg > img", "el=>el.src") temp_src = await page.Jeval(".JDJRV-smallimg > img", "el=>el.src")
request.urlretrieve(img_src, "background.png") request.urlretrieve(temp_src, "gap.png")
distance = await get_track() """ # Pyppeteer 三种解析方式 Page.querySelector() # 选择器 Page.querySelectorAll() Page.xpath() # xpath 表达式 # 简写方式为: Page.J(), Page.JJ(), and Page.Jx() """ el = await page.J("div.JDJRV-slide-btn") box = await el.boundingBox() await page.hover("div.JDJRV-slide-btn") await page.mouse.down() await page.mouse.move(box["x"] + distance + random.uniform(20, 40), box["y"], {"steps": 100}) await page.waitFor(1000)
await page.mouse.up() await page.waitFor(2000)
loop = asyncio.get_event_loop() loop.run_until_complete(main())
|