puppeteer的使用

Posted xy-ouyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了puppeteer的使用相关的知识,希望对你有一定的参考价值。

 

1、

 

2、

 

// puppeteer元素基本操作-输入文本与元素点击
const puppeteer = require(‘puppeteer‘)

async function fun() {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: { width: 1366, height: 768 } })
    const page = await browser.newPage()
    await page.goto(‘https://www.baidu.com‘)
    const input_area = await page.$(‘#kw‘) // 定位输入框
    await input_area.type(‘hello world‘) // 输入文本

    // const search_btn = page.$(‘#su‘) // 定位‘百度一下‘搜索按钮
    // await search_btn.click() // 点击
    await page.click(‘#su‘)
}

fun()

 

 

 

 

3、

 

// puppeteer获取文本元素值
const puppeteer = require(‘puppeteer‘)

async function fun() {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: { width: 1366, height: 768 } })
    const page = await browser.newPage()
    await page.goto(‘https://www.baidu.com‘)
    const input_area = await page.$(‘#kw‘) // 定位输入框
    await input_area.type(‘hello world‘) // 输入文本

    // const search_btn = page.$(‘#su‘) // 定位‘百度一下‘搜索按钮
    // await search_btn.click() // 点击
    await page.click(‘#su‘)
    
    await page.waitForSelector(‘div#content_left > div.result-op.c-container.xpath-log‘)

    let resultText = await page.$eval(‘div#content_left > div.result-op.c-container.xpath-log‘, ele => ele.innerhtml)
    console.log(`resultText=${resultText}`)
}

fun()

 

 

 

4、

// puppeteer处理多个元素
const puppeteer = require(‘puppeteer‘)

async function fun() {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: { width: 1366, height: 768 } })
    const page = await browser.newPage()
    await page.goto(‘https://www.jd.com‘)

    const input = await page.$(‘#key‘) // 定位输入框
    await input.type(‘手机‘) // 输入文本

    await page.keyboard.press(‘Enter‘) // 按下回车键

    await page.waitForSelector(‘ul.gl-warp > li‘)

    let resultTextList = await page.$$eval(‘ul.gl-warp > li‘, eles => eles.map(ele.innerText))
    console.log(‘resultTextList = ‘, resultTextList)
}

fun()

5、

// pupputeer切换iframe进行安居客登陆操作
const puppeteer = require(‘puppeteer‘)

async function fun() {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: { width: 1366, height: 768 } })
    const page = await browser.newPage()
    await page.goto(‘https://login.anjuke.com/login/form‘)

    // 打印页面所有的frame的地址
    await page.frames().map(frame => { console.log(frame.url()) })

    // 通过frame的url定位到frame
    const targetFrameUrl = ‘https://login.anjuke.com/login/iframeform‘
    const frame = await page.frames().find(frame => frame.url().includes(targetFrameUrl))

    const phone = await frame.waitForSelector(‘#phoneIpt‘)
    await phone.type(‘13530125464‘)

}

fun()

 

 

6、

// puppeteer拖拽操作阿里云验证码
async function fun() {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: { width: 1366, height: 768 }, ingoreDefaultArgs: [‘--enable-automation‘] })
    const page = await browser.newPage()
    await page.goto(‘https://account.aliyun.com/register/register.htm‘, { waitUntil: ‘networkidle2‘ }) // 等待页面加载完

    // 定位到frame
    const frame = await page.frames().find(frame => frame.url().includes(‘https://passport.aliyun.com‘))
    // 定位到验证滑块
    const span = await frame.waitForSelector(‘#nc_1_nlz‘)
    const spanInfo = await span.boundingBox()
    console.log(spanInfo)

    const div = await frame.waitForSelector(‘div#nc_1_scale_text > span‘)
    const divInfo = await div.boundingBox()

    await page.mouse.move(spanInfo.x, spanInfo.y)
    await page.mouse.down()

    // 鼠标移动
    for (let i = 0, width = divInfo.width; i < width; i++) {
        await page.mouse.move(spanInfo.x + i, spanInfo.y)
    }
    // 松开鼠标
    await page.mouse.up()
}

fun()

7、

 

 

 

 

 

---

以上是关于puppeteer的使用的主要内容,如果未能解决你的问题,请参考以下文章

React 与 Puppeteer + 伊斯坦布尔的代码覆盖率

Puppeteer:无法播放视频

使用cheerio(使用puppeteer)提取链接

如何在 puppeteer 中执行 javascript 代码

Puppet module命令参数介绍

puppet入门与掌握之puppet工作原理(原理篇)