小编har*_*ded的帖子

如何在 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万
查看次数

如何使用 puppeteer 访问文本输入字段中的当前值

我正在尝试使用 puppeteer 和 xpath从已经填写的表单中自动检索表单值。

我已经按如下方式自动填充文本输入字段,但使用 .evaluate() 执行相反的操作不起作用:

[fieldHandle] = await page.$x("//label[text() = 'My Label']/../following-sibling::td[1]//input")
await page.evaluate((x, y) => x.value = y, fieldHandle, 'newValue')
Run Code Online (Sandbox Code Playgroud)

这是我最近的尝试 - 仍然没有成功......

let [fieldHandle] = await page.$x("//label[text() = 'My Label']/../following-sibling::td[1]//input")
let fieldRaw = await fieldHandle.getProperty('textContent')
let fieldValue = await fieldRaw.jsonValue()
Run Code Online (Sandbox Code Playgroud)

希望有人知道如何实现这一目标!

javascript xpath node.js puppeteer

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

如何使用 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万
查看次数

在剧作家测试中切换选项卡

我正在尝试使用剧作家测试在选项卡之间切换,但它没有控制 windows 元素。我们有类似 playwright 中的 selenium driver.switchto().window() 的方法吗?

const { chromium } = require('playwright');
(async () => {
    const browser = await chromium.launch({ headless: false, args: ['--start-maximized'] });
    const context = await browser.newContext({ viewport: null });
    context.on("page", async newPage => {
        console.log("***newPage***", await newPage.title())
    })
    const page = await context.newPage()
    const navigationPromise = page.waitForNavigation()

    // dummy url
    await page.goto('https://www.myapp.com/')
    await navigationPromise

    // User login
    await page.waitForSelector('#username-in')
    await page.fill('#username-in', 'username')
    await page.fill('#password-in', 'password')
    await page.click('//button[contains(text(),"Sign In")]')
    await navigationPromise

    // User lands …
Run Code Online (Sandbox Code Playgroud)

javascript playwright

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

如何通过 Puppeteer 获取元素的孩子

我知道puppeteer得到它自己的句柄而不是标准DOM元素,但我不明白为什么我不能通过找到的元素继续相同的查询作为

const els = await page.$$('div.parent');

for (let i = 0; i < els.length; i++) {
    const img = await els[i].$('img').getAttribute('src');
    console.log(img);
    const link = await els[i].$('a').getAttribute('href');
    console.log(link);
}
Run Code Online (Sandbox Code Playgroud)

javascript webautomation node.js puppeteer

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

Github Actions:以注释形式报告 dotnet 测试结果

如果使用 Azure Pipelines 运行测试,您将在检查选项卡上获得一些很酷的结果。

在此输入图像描述

有没有什么方法可以从 Github Actions 执行相同的操作,这样我们就不必通过控制台输出?

在此输入图像描述

.net continuous-integration .net-core dotnet-test github-actions

7
推荐指数
1
解决办法
3437
查看次数

python playwright 中的打印页面源代码

我有 PHP 脚本,我使用带有 URL 参数的代码调用 python 函数:

import json
import sys
import urllib.parse
link = urllib.parse.unquote(sys.argv[1])
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
    page = context.new_page()
    cookie_file = open('./cookies.json')
    cookies = json.load(cookie_file)
    print(cookies)
    context.add_cookies(cookies)
    page.goto(link)
    try:
        page.wait_for_timeout(10000)
        print(page.innerHTML("*"))
        page.close()
        context.close()
        browser.close()      
    except Exception as e:
        print("Error in playwright script.")
        page.close()
        context.close()
        browser.close()     
Run Code Online (Sandbox Code Playgroud)

但是,当我访问页面后想打印页面源时,我收到

Error in playwright script.
Run Code Online (Sandbox Code Playgroud)

因为我尝试过的代码不起作用:

print(page.innerHTML("*"))
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

python webautomation python-3.x playwright playwright-python

7
推荐指数
1
解决办法
9961
查看次数

如何从 ElementHandle 中获取文本?

使用 PuppeteerSharp,我试图获取元素的文本。

ElementHandle elementHandle = await page.XPathAsync("//html/body/div[1]/section/div/section/h2")[0];
Run Code Online (Sandbox Code Playgroud)

现在我有了元素句柄,我该如何从中获取文本呢?我没有看到任何明显的方法。我本来期望 TextAsync 或类似的东西,但我没有看到它。

使用 PuppeteerSharp 5.0。

.net c# webautomation .net-core puppeteer-sharp

7
推荐指数
1
解决办法
5145
查看次数

如何等待多个选择器?

例如,我正在测试一个搜索页面,它将显示结果编号.text > span:nth-child(1)

但是,如果没有任何结果,则仅显示text="nothing".text > span:nth-child(1)不存在。

那么我怎样才能同时满足这两个条件呢?

playwright

7
推荐指数
1
解决办法
7753
查看次数