【问题标题】:Puppeteer prevent "pause on debugging" aka disable all breakpointsPuppeteer 防止“暂停调试”也就是禁用所有断点
【发布时间】:2020-04-14 07:57:39
【问题描述】:

我需要用无头模式抓取一个有很多 debugger; 的网站

有没有办法防止调试器暂停?

我尝试使用此代码在加载时发送 CTRL+F8 和 F8 但没有成功!

await crt_page.keyboard.down('Control');
await crt_page.keyboard.press('F8');
await crt_page.keyboard.up('Control');
await crt_page.keyboard.press('F8');

有什么建议吗?

【问题讨论】:

    标签: node.js google-chrome puppeteer


    【解决方案1】:

    Puppeteer 会自动在 page 中按下按键,而不是在浏览器中。

    所以我认为解决方案是安装一个 npm 包robotjs 来做浏览器之外的事情。

    希望对您有所帮助!

    如果此代码有效,请不要忘记选择我的答案作为正确答案。

    const puppeteer = require('puppeteer')
    const robot = require('robotjs')
    
    ;(async () => {
        const browser = await puppeteer.launch({
            headless: false,
            devtools: true
        })
        const [page] = await browser.pages()
    
        const open = await page.goto('https://www.example.com', { waitUntil: 'networkidle0', timeout: 0 })
    
        await page.waitFor(4000)
        await robot.keyToggle(']','down','control') // For Mac, change 'control' to 'command'
    
        await page.waitFor(500)
        await robot.keyToggle(']','down','control') // For Mac, change 'control' to 'command'
    
        await page.waitFor(500)
        await robot.keyToggle(']', 'up', 'control') // For Mac, change 'control' to 'command'
    
        await page.waitFor(1000)
        await robot.keyToggle('f8','down','control') // For Mac, change 'control' to 'command'
    
        await page.waitFor(500)
        await robot.keyToggle('f8', 'up', 'control') // For Mac, change 'control' to 'command'
    
    
    })()
    

    要调试你的robotjs,它是否有效,试试这个代码。

    下面的代码运行 puppeteer 并使用 robotjs 更改 URL。

    如果这在您的服务器上也不起作用,那么很抱歉我无法帮助您。

    const puppeteer = require('puppeteer')
    const robot = require('robotjs')
    const pageURL = 'https://www.google.com'
    const normal_Strings = ['`','1','2','3','4','5','6','7','8','9','0','-','=','[',']','\\',';','\'',',','.','/']
    const shiftedStrings = ['~','!','@','#','$','%','^','&','*','(',')','_','+','{','}','|',':','"','<','>','?']
    
    ;(async () => {
        const browser = await puppeteer.launch({
            headless: false,
            devtools: true
        })
        const [page] = await browser.pages()
    
        const open = await page.goto('https://www.example.com', { waitUntil: 'networkidle0', timeout: 0 })
    
        console.log('First URL:')
        console.log(await page.url())
        await robot.keyToggle('l','down','control') // For Mac, change 'control' to 'command'
        await page.waitFor(500)
        await robot.keyToggle('l', 'up', 'control') // For Mac, change 'control' to 'command'
        await page.waitFor(1000)
        for (let num in pageURL) {
            if (shiftedStrings.includes(pageURL[num])) {
                var key = normal_Strings[ shiftedStrings.indexOf(pageURL[num]) ]
    
                await robot.keyToggle( key,'down','shift')
                await page.waitFor(300)
                await robot.keyToggle( key, 'up', 'shift')
                await page.waitFor(300)
            }
            await robot.keyTap(pageURL[num])
            await page.waitFor(200)
        }
        await page.waitFor(1000)
        await robot.keyTap('enter')
    
        await page.waitForSelector('img#hplogo[alt="Google"]', {timeout: 0})
        console.log('Second URL:')
        console.log(await page.url())
    })()
    

    【讨论】:

    • 当然,我很高兴。如果您发现此代码运行良好,请不要忘记选择我的答案作为正确答案。
    • 对不起,但不工作...我尝试在无头和正常...
    • 控制台中显示了哪些错误(如果有)?它在我的 Mac 上运行良好。您是否已将 'command' 更改为 'control' ?您是否按类型安装了robotjs 包:npm i robotjs
    • 控制台没有错误,只是不要按 CTRL + F8 来禁用所有断点。我已经用控件替换命令,我尝试更改按钮顺序...我认为问题在于开发工具是“客户端”而不是服务器之一,所以,你不能禁用断点表单 bot
    • 如果你在headless: true 模式下运行puppeteer,那么这个脚本对你没有帮助。我已经制作了一个脚本来调试它是否有效;此脚本仅通过在 Chromium 地址栏中键入 URL 来更改 URL。
    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多