标签: playwright

获取使用 Playwright 启动的浏览器的 pid

如何获取使用 Playwright 启动的浏览器的 pid?我尝试过:browser.process().pid但不幸的是它没有成功。

node.js playwright

6
推荐指数
1
解决办法
1692
查看次数

如何使用 Playwright Python 异步打开多个页面?

我想使用 Playwright for Python 一次打开多个 url。但我正在努力弄清楚如何做。这是来自异步文档:

async def main():
    async with async_playwright() as p:
        for browser_type in [p.chromium, p.firefox, p.webkit]:
            browser = await browser_type.launch()
            page = await browser.newPage()
            await page.goto("https://scrapingant.com/")
            await page.screenshot(path=f"scrapingant-{browser_type.name}.png")
            await browser.close()

asyncio.get_event_loop().run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

这将按顺序打开每个 browser_type。如果我想并行进行,我该怎么做?如果我想对网址列表做类似的事情,我该怎么做?

我尝试这样做:

urls = [
    "https://scrapethissite.com/pages/ajax-javascript/#2015",
    "https://scrapethissite.com/pages/ajax-javascript/#2014",
]
async def main(url):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.newPage()
        await page.goto(url)
        await browser.close()

async def go_to_url():
    tasks = [main(url) for url in urls]
    await asyncio.wait(tasks)

go_to_url()
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

92: RuntimeWarning: …
Run Code Online (Sandbox Code Playgroud)

python webautomation web-scraping playwright playwright-python

6
推荐指数
1
解决办法
3506
查看次数

如何在 Playwright.js 中检查页面上是否存在元素

我正在使用 playwright.js 为https://target.com编写脚本,并且在您提交运输信息的页面上,如果您之前已完成结帐流程,它将提供使用已保存地址的选项目标帐户。

我想每次运行脚本时都输入新的运输信息,所以我必须让编剧在页面上点击删除,然后输入运输信息。

下面显示的函数用于单击删除,但随后超时if (await page.$$("text='Delete'") != [])而不是执行else该函数的一部分。

我怎样才能重写这个函数,让它简单地检查元素(选择器:)是否text='Delete'存在,如果存在则单击它,如果不存在则执行函数的填充部分?

  async function deliveryAddress() {
    if (await page.$$("text='Delete'") != []) {
      await page.click("text='Delete'", {force:true})
      await deliveryAddress()
    } else {
      await page.focus('input#full_name')
      await page.type('input#full_name', fullName, {delay: delayms});
      await page.focus('input#address_line1')
      await page.type('input#address_line1', address, {delay: delayms});
      await page.focus('input#zip_code')
      await page.type('input#zip_code', zipCode, {delay: delayms});
      await page.focus('input#mobile')
      await page.type('input#mobile', phoneNumber, {delay: delayms});
      await page.click("text='Save & continue'", {force:true})
    }
  }
Run Code Online (Sandbox Code Playgroud)

javascript browser-automation node.js playwright

6
推荐指数
5
解决办法
6768
查看次数

使用 playwright-python 下载 pdf 文件

我正在尝试使用 (Python) 下载在浏览器中呈现的 PDF 文件(未显示为弹出窗口或下载)playwright。没有公开 URL,因此您不能简单地抓取链接并使用requests.get("file_url").

我试过了:

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.newPage(acceptDownloads=True)
    
        await page.goto("www.some_landing_page.com")
            
        async with page.expect_download() as download_info:
            await page.click("a")     # selector to a pdf file
        
        download = download_info.value
        path = download.path()
Run Code Online (Sandbox Code Playgroud)

我也尝试过page.expect_popup(),但没有运气。我的理解是,这不能使用 来完成pyppeteer,但如果可能的话,也欢迎这种方式的解决方案。

python-3.x pyppeteer playwright playwright-python

6
推荐指数
1
解决办法
3642
查看次数

Playwright 中有没有办法选择动态表中的特定按钮?

我是开发新手,在创建一个 e2e 测试时面临着一个真正的问题。
基本上,我有一个包含 2 行或更多行的表格,每行有 5 列(标题、x、y、z 按钮)。如何使用标题单击正确行上的按钮?(这是为了证明这个表的删除过程有效的测试)。我正在测试的应用程序是用 React 框架编写的,因此所有表都会频繁更改,我需要一种信任代码并且没有任何错误的方法。 我需要单击此元素,但它始终不在同一位置

超文本标记语言

<table>
    <tr>
     <td>Some Title</td>
     <td>x</td>
     <td>y</td>
     <td>
       <button>I need to click this</button>
    </td>
    </tr>
    <!--other rows--!>
</table>  
Run Code Online (Sandbox Code Playgroud)

这是我遇到的解决方案

const rows = await page.$$eval("tr", (row) =>
    row.map((e) => e.textContent)
);
const correctRowIndex = rows.findIndex((e) => e.includes(TITLE_I_KNOW));
await page.click(
    "//tr[normalize-space(.)='" + rows[correctRowIndex] + "']/td/button"
);
Run Code Online (Sandbox Code Playgroud)

期望的行为

我的代码似乎没有遵循最佳实践,我需要一个将其分为两部分的解决方案。
1 - 将正确的行保存到变量中
2 - 单击已保存行中包含的按钮

javascript css-selectors e2e-testing playwright

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

使用 Playwright 基于 Azure AD 的 SSO

我们如何测试具有基于 Azure AD 的身份验证的 SPA?当用户打开应用程序时,用户首先被发送到 login.microsoftonline.com,并在输入用户电子邮件后,页面重定向回应用程序主页。在这种情况下,我们如何使用 Playwright 实现自动化?

automated-tests browser-automation puppeteer playwright

6
推荐指数
1
解决办法
2079
查看次数

如何使用 playwright 检查某个元素是否在文档中?

我想测试一个元素是否已被渲染。所以我希望期望 if 存在。有这个命令吗?

\n
await page.goto(\xe2\x80\x98<http://localhost:3000/>');\nconst logo = await page.$(\xe2\x80\x98.logo\xe2\x80\x99)\n\n// expect(logo.toBeInDocument())\n
Run Code Online (Sandbox Code Playgroud)\n

node.js playwright

6
推荐指数
2
解决办法
8069
查看次数

Firefox Headless 无法以非 root 用户身份在 Docker 中工作

正如标题所说,我无法以非 root 用户身份在 Docker 容器内以无头模式运行 Firefox。考虑以下 Dockerfile,构建于docker build -t firefox .

FROM python:3.8-buster
RUN apt-get update -qq \
    && apt-get install -qy \
        libappindicator1 \
        libasound2 \
        libatk1.0-0 \
        libc6 \
        libcairo2 \
        libcups2 \
        libdbus-1-3 \
        libexpat1 \
        libfontconfig1 \
        libgbm-dev \
        libgcc1 \
        libgconf-2-4 \
        libgdk-pixbuf2.0-0 \
        libglib2.0-0 \
        libgtk-3-0 \
        libnspr4 \
        libnss3 \
        libpango-1.0-0 \
        libpangocairo-1.0-0 \
        libpci-dev \
        libstdc++6 \
        libx11-6 \
        libx11-xcb1 \
        libxcb1 \
        libxcomposite1 \
        libxcursor1 \
        libxdamage1 \
        libxext6 \ …
Run Code Online (Sandbox Code Playgroud)

firefox docker firefox-headless playwright

6
推荐指数
1
解决办法
1228
查看次数

Playwright - 如何检查元素是否在视口中?

我有一个类似数组的节点对象(它是一个轮播),它们的顺序是在每次页面刷新时随机生成的,剧作家发现所有元素都是可见的,但其中一些元素在视口之外(基于收到的错误) 。我需要确保在尝试单击该元素时该元素位于视口内,否则我会收到一条错误消息,指出该元素位于视口外。

如何确定类似数组对象的随机选取的节点元素是否确实在视口内?

javascript viewport puppeteer playwright

6
推荐指数
2
解决办法
9739
查看次数

如何使用 Playwright 与 Google Maps 或 OpenStreetMaps 等地图进行交互?

我一直在尝试使用 Playwright 与 Google Maps 或 OpenStreetMaps 等网站的地图组件进行交互。我尝试使用 browser.mouse.move()、browser.mouse.up() 和 browser.mouse.down() 的组合,并以文字作为参数。当我运行它时,它似乎根本没有对地图做任何事情。

有没有办法用 Playwright 移动地图?

我创建了一个 GitHub 存储库,以便可以轻松复制。我也会把代码放在下面。 https://github.com/vincent-woodward/Playwright-Map-Interaction

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

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

  //await page.goto("https://www.google.com/maps");
  await page.goto("https://www.openstreetmap.org/#map=4/38.01/-95.84");

  await page.mouse.move(600, 300);
  await page.mouse.down();
  await page.mouse.move(1200, 450);
  await page.mouse.up();

  browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

javascript playwright

6
推荐指数
2
解决办法
176
查看次数