标签: playwright

编剧错误:未下载 Firefox 修订版。运行“npm install”或“yarn install”

const playwright = require("playwright");

(async () => {
  const browsers = ["chromium", "firefox", "webkit"];

  for (const browserType of browsers) {
    const browser = await playwright[browserType].launch({args: ['--no-sandbox']});
    const context = await browser.newContext();
    const page = await context.newPage("http://whatsmyuseragent.org/");

    await page.screenshot({ path: `example-${browserType}.png` });
  }
})();
Run Code Online (Sandbox Code Playgroud)

运行此脚本后,我得到 UnhandledPromiseRejectionWarning: E​​rror: Firefox revision is not download. 在控制台中运行“npm install”或“yarn install”。如何解决?

javascript playwright

5
推荐指数
1
解决办法
513
查看次数

如何获得剧作家的元素集合?

如何使用剧作家获取页面上的所有图像?我只能ElementHandle通过以下代码获得一个 ( ),但不能获得一个集合。

const { chromium } = require("playwright");

class Parser {
  async parse(url) {
    const browser = await chromium.launch();
    const page = await browser.newPage();
    await page.goto(url);
    await page.waitFor("img");
    // TODO: get somehow collection of elements
    return await page.$("img");
  }
}

module.exports = Parser;
Run Code Online (Sandbox Code Playgroud)

在远处的另一个模块中的某处:

const Parser = require("./path/to/dir/Parser.js");
const parser = new Parser();

parser
    .parse(body.url)
    .then(elemHandle => {
      // here I get only one ElementHandle object, but suppose to get an array or collection
    })
    .catch(err => …
Run Code Online (Sandbox Code Playgroud)

javascript node.js web-scraping playwright

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

Puppeteer:我怎样才能等到列表关闭?如何等到元素从 DOM 中消失?

?ase: 有一个列表,您需要在其中选择一个项目,然后关闭。当您单击另一个项目时,列表没有时间关闭。最后,再次单击另一个列表元素。

await page.waitForSelector('.list');
await page.click('.list');
await page.waitForSelector('.list-element');
await page.click('.list-element'); // click on the list element and list closes
await page.click('.another-element'); // click on the list
Run Code Online (Sandbox Code Playgroud)

puppeteer playwright

5
推荐指数
1
解决办法
1066
查看次数

如何使用元素标题的一部分在 Puppeteer 或 Playwright 中查找元素?

我需要测试这个元素何时出现在 DOM 上。我想用“标题”来表达这一点。NBA 部分始终保持不变,另一部分“0c381941-0”是动态的。

我试过

await page.waitForSelector('.identifier.identifier-group[title=`NBA ${idVariable}`)

但这些反引号在那里是不可接受的。

有什么线索吗?

    <dl class="identifier identifier-group" title="NBA 0c381941-0">
    <dl class="player-identifier-label identifier" title="NHI 0c381941-0">
    <dt><span>NBA</span></dt>
    <dd><span>0c381941-0</span></dd>
    </dl>
    </dl>
Run Code Online (Sandbox Code Playgroud)

puppeteer playwright

5
推荐指数
1
解决办法
2366
查看次数

如何在 playwright 中运行自定义 js 函数

如何在 playwright 中运行自定义 js 函数?例如显示警报。我已经尝试过这种方式,但没有奏效。

var url = await page.evaluate(async() => {
  await function alert() {
    alert("alert");
  }

  await alert();
});
Run Code Online (Sandbox Code Playgroud)

javascript webautomation puppeteer chrome-devtools-protocol playwright

5
推荐指数
1
解决办法
3135
查看次数

在 Heroku 上部署 playwright-python

我正在使用一个 python 模块,该模块在我的 Heroku Flask 应用程序中使用 playwright。该模块的安装说明要求我安装浏览器二进制文件,例如:

python -m playwright install
Run Code Online (Sandbox Code Playgroud)

虽然当我在本地部署它时它可以工作,但我似乎无法将浏览器二进制安装合并到部署中。我尝试改用heroku playwright buildpack(https://github.com/mxschmitt/heroku-playwright-buildpack),但这似乎不起作用,并且出现如下错误:

2020-11-17T23:06:42.252585+00:00 app[web.1]: "webkit" browser was not found.
2020-11-17T23:06:42.252585+00:00 app[web.1]: Please complete Playwright installation via running
2020-11-17T23:06:42.252585+00:00 app[web.1]: 
2020-11-17T23:06:42.252586+00:00 app[web.1]:     "python -m playwright install"
Run Code Online (Sandbox Code Playgroud)

我还尝试在构建包中手动添加python -m playwright install命令,但这也不起作用。有没有办法在heroku中使用playwright正确安装二进制文件?

python heroku playwright

5
推荐指数
1
解决办法
1428
查看次数

如何检查是否打开了新的浏览器选项卡?

在 Web 应用程序(在 React 中实现)中,当我按下特定按钮时,会打开一个新的浏览器选项卡。我想检查是否发生了这种情况以及新选项卡的 URL 是否正确。

playwright

5
推荐指数
1
解决办法
4570
查看次数

在 Playwright for Python 中,如何从框架 (iframe) 中检索元素的句柄?

我已经成功地在 python 中使用 Playwright 从页面中获取元素。我现在遇到了从嵌入iframe的文档中获取元素的挑战。作为示例,我使用了w3schools 页面来解释<option>element,该页面在 iframe 中显示结果。<option>我正在尝试从 iframe 中检索该元素的句柄。

获取页面上的 an 元素的“正常”方式page.querySelector()无法获取 an elementHandle,这只会打印<class 'NoneType'>

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch(headless=False)
        page = browser.newPage()
        page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
        element = page.querySelector('select')
        print(type(element))
        browser.close()
Run Code Online (Sandbox Code Playgroud)

我尝试首先显式获取 iframe 的句柄,但这会产生相同的结果 ( <class 'NoneType'>):

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch(headless=False)
        page = browser.newPage()
        page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')      
        iframe = page.querySelector('iframe')
        element = …
Run Code Online (Sandbox Code Playgroud)

python iframe webautomation playwright playwright-python

5
推荐指数
1
解决办法
4968
查看次数

在 docker 中运行 playwright 时缺少依赖项

我试图在 docker 中运行该剧作家,但出现此错误:

browserType.launch: Host system is missing dependencies!

Missing libraries are:
  libvpx.so.6
  libicui18n.so.66
  libicuuc.so.66
  libwoff2dec.so.1.0.2
  libharfbuzz-icu.so.0
  libgstgl-1.0.so.0
  libgstcodecparsers-1.0.so.0
  libjpeg.so.8
  libenchant.so.1
  libsecret-1.so.0
  libhyphen.so.0
  libGLESv2.so.2
Run Code Online (Sandbox Code Playgroud)

然后我尝试安装必要的库,通过添加以下内容来使捆绑版本的剧作家工作:

RUN apt-get update && apt-get install -y wget --no-install-recommends \
    && apt-get update \
    && apt-get install -y \
    libvpx6 \
    lib64icui18n66 \
    libicuuc66 \
    ....
Run Code Online (Sandbox Code Playgroud)

但我仍然收到这些错误:

E: Unable to locate package libvpx6 // I tried with libvpx5 but got the same error
E: Unable to locate package lib64icui18n66
E: Unable to locate package libicuuc66 …
Run Code Online (Sandbox Code Playgroud)

dependencies docker playwright

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

Playwright - 查找多个元素或类名称

我读过一些与此相关的不同的质量保证,但似乎没有一个有效。

我正在尝试使用名为 mat-radio-checked 的类来定位名为 mat-radio-button 的元素(Angular)。然后选择内部文本。

在 Chrome 中这很简单:

https://i.stack.imgur.com/Ev0iQ.png

https://i.stack.imgur.com/lVoG3.png

要找到 Playwright 中匹配的第一个元素,我可以执行以下操作:

      let test: any = await page.textContent(
      "mat-radio-button.mat-radio-checked"
    );

    console.log(test);
Run Code Online (Sandbox Code Playgroud)

但如果我尝试这个:

      let test: any = await page.$$(
      "mat-radio-button.mat-radio-checked"
    );

    console.log(test);
    console.log(test[0]);
    console.log(test[1]);
  });
Run Code Online (Sandbox Code Playgroud)

它不返回我可以选择其内部文本的元素数组。

我需要能够找到该类的所有元素,以便我可以使用 Expect 来确保返回的内部文本正确,例如:

    expect(test).toBe("Australian Citizen");
Run Code Online (Sandbox Code Playgroud)

javascript automation browser-automation typescript playwright

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