标签: puppeteer

Puppeteer:获取内部HTML

有没有人知道如何获取元素的innerHTML或文本.甚至更好; 如何单击具有特定innerHTML的元素.这是如何使用普通的javascript:

var found = false
$(selector).each(function() {
                if (found) return;
                else if ($(this).text().replace(/[^0-9]/g, '') === '5' {
                    $(this).trigger('click');
                    found = true
                }
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

javascript selenium webautomation node.js puppeteer

14
推荐指数
4
解决办法
2万
查看次数

使用Puppeteer检测并测试Chrome扩展程序

有没有办法使用Puppeteer测试Chrome扩展程序?例如,扩展程序可以检测Chrome是否以"测试"模式启动以提供不同的UI,检查内容脚本是否正常工作等?

automated-tests google-chrome-extension puppeteer

14
推荐指数
1
解决办法
5146
查看次数

在本地 Windows 中配置 PuppeteerexecutablePath chrome

  • 傀儡师版本:1.11.0
  • 平台/操作系统版本:Windows 10 pro
  • Node.js 版本:12.6.6

当我在windows中进行本地开发测试时,发生了executablePath的问题。

“无法启动 chrome!spawn /usr/bin/chromium-browser ENOENT”

我看到 Windows 需要获取完整路径。否则找不到chrome.exe

代码中的默认值:

const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});
Run Code Online (Sandbox Code Playgroud)

在 Windows 中它的工作方式如下:

const browser = await puppeteer.launch({executablePath: 'C:\\your_workspace\\node_modules\\puppeteer\\.local-chromium\\win64-(version)\\chrome-win\\chrome.exe'});
Run Code Online (Sandbox Code Playgroud)

在可视化代码中建议路径

可视化代码视图浏览器

node.js puppeteer

14
推荐指数
2
解决办法
5万
查看次数

如何在 playwright 中等待 JavaScript 完成

我正在使用 Playwright 和 JavaScript 测试 UI。我的代码找到一个输入元素,有时可以是下拉菜单,有时是文本,有时是日期。为了解决这个问题,我分两步输入值。首先,我填充文本,然后单击 Tab 键来调用格式化元素中的值的 JavaScript。

await page.fill("#myID", inputText); 
await page.keyboard.press('Tab');  // this line trigger the JS

// continue to the next element 
Run Code Online (Sandbox Code Playgroud)

问题是,它没有等待 JavaScript 完成。我怎样才能等待 JS 完成然后代码继续。

javascript puppeteer playwright

14
推荐指数
2
解决办法
5万
查看次数

Puppeteer - 错误:协议错误 (Network.getResponseBody):找不到具有给定标识符的资源

我正在尝试使用此代码使用 puppeteer 从网站获取响应正文。

#!/usr/bin/env node

require('dotenv').config();
const puppeteer = require('puppeteer');
const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});
const path = require('path');
const fs = require('fs');

//
console.log('Starting Puppeteer...');

let responseBody = [];

(async () => {
    const browser = await puppeteer.launch({
        headless: false,
        executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
    });
    const page = await browser.newPage();
    
    await page.setRequestInterception(true);

    page.on('request', (request) => {
        request.continue();
    });

    //
    page.on('requestfinished', async (request) => {
        const response =  await request.response();
        const url = response.url();
        // store …
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer

14
推荐指数
1
解决办法
7813
查看次数

Puppeteer console.log - 如何查看 JSHandle@object 内部?

我有一个 React/Redux 应用程序,我正在使用 Puppeteer 进行测试。根据文档,我使用以下代码来显示控制台输出:

page.on('console', msg => {
    for(let i = 0; i < msg.args().length; ++i) {
        let text = msg.args()[i];
        console.log(`${i}: ${text}`);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,当 redux-logger 将对象记录到控制台(prevState、nextState)时,Puppeeter 会改为显示JSHandle@object在我的控制台输出中。如何查看此对象中的键和属性?

javascript testing reactjs redux puppeteer

13
推荐指数
2
解决办法
3100
查看次数

使用 Puppeteer 获取 HTML 属性的值

使用 Puppeteer,我选择了一些 HTML 元素:

await page.$$( 'span.styleNumber' );
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法获取元素的文本:

console.log( await ( await styleNumber.getProperty( 'innerText' ) ).jsonValue() );
Run Code Online (Sandbox Code Playgroud)

如何获取元素的 data-Color 属性的值?

这是我的脚本:

HTML

<span class="styleNumber" data-Color="Blue">SG1000</span>
<span class="styleNumber" data-Color="Green">SG2000</span>
<span class="styleNumber" data-Color="Red">SG3000</span>
Run Code Online (Sandbox Code Playgroud)

傀儡师

const puppeteer = require( 'puppeteer' );

( async() => {
    const browser = await puppeteer.launch();

    const page = await browser.newPage();

    await page.goto( 'http://www.example.com/sample.php' );

    // Get a list of all elements.
    var styleNumbers = await page.$$( 'span.styleNumber' );

    // Print the style numbers.
    for( let styleNumber of …
Run Code Online (Sandbox Code Playgroud)

javascript node.js ecmascript-6 puppeteer

13
推荐指数
1
解决办法
3万
查看次数

Puppeteer:如何存储会话(包括 cookie、页面状态、本地存储等)并稍后继续?

是否可以使用 Puppeteer 脚本打开页面并与之交互,然后按原样保存该浏览器会话,然后加载另一个脚本并从那里继续?

“浏览器会话”是指当前加载的页面,包括页面状态(DOM 空间和 javascript 变量等)、cookie、本地存储、整个shebang。基本上它需要的一切都在上一个脚本停止的地方继续。

如果没有,那么至少可以导出和导入 cookie 和本地存储吗?因此,我可以重新加载特定页面并继续处理,同时保持任何登录或会话数据完整无缺。

browser cookies session local-storage puppeteer

13
推荐指数
2
解决办法
5293
查看次数

puppeteer 等待元素消失或从 DOM 中移除

有没有什么办法或 Puppeteer API 可以等待元素从 Dom 中消失或移除,然后继续执行?

例如,我有一个加载动画,我想等到这个加载动画从 Dom 中移除。

javascript webautomation node.js puppeteer

13
推荐指数
2
解决办法
7594
查看次数

Headless 浏览器图像质量 - Headless chrome、phantom js、slimmer js

我正在寻找有关无头浏览器中发生的事情的更多信息。过去我一直在使用不同的无头浏览器,例如slimmerJSPhantom.jsHeadless Chrome,目的是在不同的站点上截取屏幕截图。

我从来没有生成过与您在浏览器中看到的相似的真实、清晰质量的图像,它看起来像是一种工具限制,例如,这是您可以从中获得的最高质量,但我想了解为什么,以及可能如何使它变得更好。

请比较下面的例子。

  1. 在这个网站https://en.wikipedia.org/wiki/Main_Page 中,在左上角找到维基百科标志。
  2. 这是无头 chrome 通过 puppeteer 截取的那个标志的截图:

在此处输入图片说明

如果将真实网站与屏幕截图进行比较,您可以看到图像是如何模糊的。在这个例子中,它只是一个图像,但这也发生在 HTML 文本中。

现在,如果我要使用我的计算机截取屏幕截图,无论是 windows、mac 还是 linux,我都会得到一个质量非常好的屏幕截图,看起来完全像真正的交易。

那么为什么会发生这种情况呢?我尝试了所有标准的事情,例如在每个库中设置最高质量的屏幕截图,并设置一个足够大的视口,以便屏幕截图具有合适的分辨率。这真的是您可以从无头浏览器屏幕截图中获得的最高质量吗?

对这方面的任何启示将不胜感激。谢谢!

javascript webautomation node.js google-chrome-headless puppeteer

13
推荐指数
1
解决办法
2507
查看次数