js 使用puppeteer 模拟登入,包括操作 iframe,

2024-10-21  本文已影响0人  川流不息attitude
npm i puppeteer
npm install puppeteer-extra-plugin-stealth

 npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth

//const puppeteer = require('puppeteer');
const puppeteer = require('puppeteer-extra')

// add stealth plugin and use defaults (all evasion techniques)
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
puppeteer.launch({
    headless: false,
    slowMo: 100,
}).then(async browser => {
    console.log('Running tests..')
    const page = await browser.newPage()
    await page.goto('XXXXX')
    const reg = ".*login.m.taobao.com.*"
    const frameSelector = { url: new RegExp(reg) }
    await pause(800);
    page.frames().map(frame => {console.log("url:"+frame.url())});
    //let frame = page.waitForFrame("body > div:nth-child(8) > iframe");
    const targetFrameUrl = "XXXX"
    const frame = await page.frames().find(frame=> frame.url().includes(targetFrameUrl));
    ////await frame.click("#login-form > div.login-blocks.switch-login-types > a");
    const passwordLogin = frame.waitForSelector(".password-login-link");
    await (await passwordLogin).click();

    const username = frame.waitForSelector("#fm-login-id");
    const password = frame.waitForSelector("#fm-login-password");
    await (await username).type("XXX",{delay:200})
    await (await password).type("XXX",{delay:220})
    await pause(200);
    const loginButton = frame.waitForSelector(".fm-button");
    await (await loginButton).click();
    await pause(500);
    const okButton = frame.waitForSelector(".dialog-btn-ok");
    await (await okButton).click({delay:120})
   // const p = { x: 13, y: 23 };
   /// await frame.locator(".login-blocks .block8").click({offset:p});
    await pause(1500);
    await browser.close()
    console.log(`All done, check the screenshot. ✨`)
})


function pause(milliseconds) {
    return new Promise((resolve) => {
        setTimeout(resolve, milliseconds);
    });
};

上一篇 下一篇

猜你喜欢

热点阅读