puppeteer实现自动注册(绕过滑块验证)
前置知识点
- puppeteer的基本操作流程
- 对dom节点的准确获取
- 事件的处理
操作流程
- 打开大麦网注册页面
- 由于注册页面使用iframe,所以定位iframe
- 找到输入框元素,输入信息
- 滑块逻辑的处理
- 提交
代码
const puppeteer = require('puppeteer');
(async () => {
const broswer = await puppeteer.launch({
headless: false,
args:['--window-size=1920, 1080'],
ignoreDefaultArgs:'--enable-automation'}
)
const page = await broswer.newPage()
await page.goto('https://passport.damai.cn/register', {waitUntil:'domcontentloaded'})
const frame = await page.frames().find(frame => frame.url().includes('https://ipassport.damai.cn/member'))
const phone = await frame.waitForSelector('.select-mobile-input-component > span > input[type=text]')
await phone.type('13111112222', { delay: 100 });
const pwd = await frame.waitForSelector('#container > div > form > div > div:nth-child(2) > div > div.pwd-wrap > span > input')
await pwd.type('z2Dw2a~W!',{ delay: 100 })
const repwd = await frame.waitForSelector('#container > div > form > div > div:nth-child(3) > div > span > input')
await repwd.type('z2Dw2a~W!',{ delay: 100 })
const start = await frame.waitForSelector('.nc_iconfont.btn_slide')
const startInfo = await start.boundingBox()
const end = await frame.waitForSelector('.nc-lang-cnt')
const endInfo = await end.boundingBox()
await page.mouse.move(startInfo.x, startInfo.y)
await page.mouse.down()
for (let i = 0; i < endInfo.width; i++) {
await page.mouse.move(startInfo.x+i, endInfo.y)
}
await page.mouse.up()
await frame.click('div.form-checkbox > label > input[type=checkbox]')
await frame.click('#container > div > form > div > div:nth-child(6) > div > button')
})()