标签: webautomation

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
查看次数

在 Puppeteer 中连接浏览器

是否可以将浏览器连接到 puppeteer 而无需在 puppeteer 中实例化它?例如,像普通用户一样运行一个 Chromium 实例,然后在代码中将它连接到一个 puppeteer 实例?

javascript google-chrome webautomation node.js puppeteer

11
推荐指数
1
解决办法
8087
查看次数

如何使用 Playwright 打开新选项卡(例如,单击按钮在新选项卡中打开新部分)

我正在寻找针对当前情况的更简单的解决方案。例如,您打开 google(任何其他网站),并且希望通过单击按钮(例如 Gmail)- 使用 Playwright 在新选项卡中打开此页面。

let browser, page, context;
describe('Check the main page view', function () {
    before(async () => {
        for (const browserType of ['chromium']) {
            browser = await playwright[browserType].launch({headless: false});
            context = await browser.newContext();
            page = await context.newPage();
            await page.goto(baseUrl);
        }
    });
    after(async function () {
        browser.close();
    });
    
        await page.click(tax);
        const taxPage = await page.getAttribute(taxAccount, 'href');

        const [newPage] = await Promise.all([
        context.waitForEvent('page'),
        page.evaluate((taxPage) => window.open(taxPage, '_blank'), taxPage)]);

        await newPage.waitForLoadState();
        console.log(await newPage.title());
Run Code Online (Sandbox Code Playgroud)

javascript tabs webautomation node.js playwright

11
推荐指数
2
解决办法
3万
查看次数

如何在 JavaScript 中使用 playwright 选择下拉选项?

我想使用 Playwright JS 从下面的 DOM 中选择“全部”选项,我已经尝试过page.selectOption('select#rows per page', '-1');page.selectOption('id=mui-55656', '-1');没有成功。任何帮助,将不胜感激。谢谢。在此输入图像描述

javascript webautomation playwright

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

剧作家“没有发现测试。” 在 example.spec.ts 的简单副本上

我刚刚安装了 playwright (v1.18.1) 来尝试一下 (Windows 11),我感觉有些不对劲。我可以正常运行 example.spec.ts 脚本,但如果我复制该文件然后尝试运行该副本,则会出现错误no tests found.

\n

这些步骤看起来很基本...

\n

首先测试运行 C:\\playwright\\test\\tests\\example.spec.ts 脚本...

\n
C:\\playwright\\test\\tests>npx playwright test example.spec.ts\n\nRunning 25 tests using 1 worker\n\n  -  example.spec.ts:14:3 \xe2\x80\xba New Todo \xe2\x80\xba should allow me to add todo items\nTerminate batch job (Y/N)?\n\n  25 skipped\n
Run Code Online (Sandbox Code Playgroud)\n

[这样有效]然后创建一个副本来开始玩......

\n
C:\\playwright\\test\\tests>copy example.spec.ts test4.ts\n        1 file(s) copied.\n
Run Code Online (Sandbox Code Playgroud)\n

但在编辑 test4.ts 之前,我检查它是否会运行...

\n
C:\\playwright\\test\\tests>npx playwright test test4.ts\n\n=================\n no tests found.\n=================\nnpm ERR! code 1\nnpm ERR! path C:\\playwright\\test\\tests\nnpm ERR! command failed\nnpm ERR! command C:\\WINDOWS\\system32\\cmd.exe /d …
Run Code Online (Sandbox Code Playgroud)

javascript webautomation playwright

11
推荐指数
2
解决办法
3万
查看次数

如何在 Puppeteer 的 iframe 元素中选择元素

由于 ESPN 不提供 API,我尝试使用 Puppeteer 来抓取有关我的梦幻足球联赛的数据。但是,由于登录表单与 iframe 元素嵌套,我很难尝试使用 puppeteer 登录。

我去了http://www.espn.com/login并选择了 iframe。除了主要部分,我似乎无法选择 iframe 中的任何元素

    frame.$('.main')
Run Code Online (Sandbox Code Playgroud)

这是似乎通过登录表单获取 iframe 的代码。

    const browser = await puppeteer.launch({headless:false});
    const page = await browser.newPage();

    await page.goto('http://www.espn.com/login')
    await page.waitForSelector("iframe");

    const elementHandle = await page.$('div#disneyid-wrapper iframe');
    const frame = await elementHandle.contentFrame();
    await browser.close()
Run Code Online (Sandbox Code Playgroud)

我希望能够访问 iframe 元素中的用户名字段、密码字段和登录按钮。每当我尝试访问这些字段时,都会返回 null。

javascript iframe webautomation node.js puppeteer

10
推荐指数
2
解决办法
1万
查看次数

你如何为 firefox 安装和运行 puppeteer

嗨,我正在做一些网络自动化。我正在尝试打开一个 url,但我在 chrome 控制台中收到数据 URL 错误,所以我转向 firefox 控制台以解决在 chrome 控制台中打开的无数据 url 问题。问题是“npm install puppeteer-firefox”无法为 firefox 安装 puppeteer。如何为 firefox 安装 puppeteer 并将其包含在代码中以便我可以使用它?

由于数据 url 错误,代码在 chrome 中不起作用

const url = await page.evaluate(async () => {

    
        document.querySelector('.n3VNCb').src;
        
    });
    
    url.toString();
    
    await page.goto(url);
Run Code Online (Sandbox Code Playgroud)

我在 node.js 命令提示符中输入的内容来安装 puppeteer firefox。这没有用

npm i puppeteer-firefox
Run Code Online (Sandbox Code Playgroud)

我从 node.js 命令提示符收到的错误

npm WARN 已弃用 puppeteer-firefox@0.5.1:Firefox 支持正在逐渐过渡到 puppeteer 包。从 puppeteer v2.1.0 开始,您可以与 Firefox Nightly 进行交互。puppeteer-firefox > 包将一直可用,直到转换完成,但不再主动维护。有关更多信息,请访问https://wiki.mozilla.org/Remote

puppeteer-firefox@0.5.1 安装 C:\Users\user\Desktop\filename\filename\node_modules\puppeteer-firefox node install.js

错误:无法下载 Firefox rv0.0.1!错误:下载失败:服务器返回代码 404。网址:https : //github.com/puppeteer/juggler/releases/download/v0.0.1/firefox-win64.zip

我也尝试过这些,因为错误说要做,但它们没有用

(节点:14348)UnhandledPromiseRejectionWarning:错误:找不到最新的浏览器修订版。运行“PUPPETEER_PRODUCT=firefox …

javascript firefox webautomation node.js puppeteer

10
推荐指数
3
解决办法
2万
查看次数

如何使用 Playwright 获取下拉菜单的选定选项

我正在使用 Playwright 的 C# 语言绑定。

HTML 示例:

<select id="txtType" name="Type" class="form-control">
        <option>Blog Posts</option>
        <option>Books</option>
        <option>Presentations</option>
        <option>Videos</option>
        <option>Podcasts</option>
        <option>Examples</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我知道我可以用来Page.SelectOptionAsync设置下拉列表的选定选项,但如何获取当前选定的选项?

当我查看 DropDown 的所有属性时,我看不出ElementHandles.

c# webautomation playwright playwright-sharp

9
推荐指数
3
解决办法
2万
查看次数

如何使用 Playwright 保存请求的响应正文?

我需要拦截网络请求并将其响应主体保存到变量中,这样我就可以使用 UI 上显示的值执行断言,但是当我尝试访问应该包含已保存响应主体的变量时,我会收到 [object Object]一个有效的机构。

JSON.stringify 也不能解决问题,因为我的变量变成了{"_type":"Page","_guid":"page@"}而不是实际的响应。

这是代码:

        const resp = await page.on('response', async response => {
            if (response.url().includes('/some_url/') && response.status() === 200) {
                console.log('BODY() ' + (await response.body())); //logs valid JSON response body
                return await response.body();
            }
        })
        console.log('RESPONSE' + resp); //logs RESPONSE[object Object]
Run Code Online (Sandbox Code Playgroud)

javascript automated-tests webautomation e2e-testing playwright

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

Python,机械化,设置多个标题的正确语法?

我似乎无法找到如何做到这一点,我试图用python的机械化模块设置多个标头,例如:

br.addheaders = [('user-agent', '   Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3')]
br.addheaders = [('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')]
Run Code Online (Sandbox Code Playgroud)

但它似乎只需要最后的br.addheaders ..所以它只显示'accept'标题,而不是'user-agent'标题,这让我相信每次调用'br.addheaders'都会覆盖任何以前的调用此..我无法想出包含2个或更多标题的语法,所以我非常感谢任何帮助..

我正在使用这个网站测试标题输出:

http://www.ericgiguere.com/tools/http-header-viewer.html

python mechanize webautomation http-headers

8
推荐指数
1
解决办法
7227
查看次数