我正在使用Apify 的 puppeteer登录该网站。我确实研究过类似的问题,但无济于事。
我无法找到链接登录页面上看到的主登录按钮的可点击 ID/元素。目前,我的代码如下所示:
const Apify = require('apify');
Apify.main(async () => {
const input = await Apify.getValue('INPUT');
const browser = await Apify.launchPuppeteer();
const page = await browser.newPage();
await page.goto('https://www.sunpass.com/vector/account/home/accountLogin.do');
// Login
await page.type('#tt_username1', input.username);
await page.type('#tt_loginPassword1', input.password);
await page.waitFor(2000);
await page.click('#entryform input');
await page.waitForNavigation();
// Get cookies
const cookies = await page.cookies();
// Use cookies in other tab or browser
const page2 = await browser.newPage();
await page2.setCookie(...cookies);
await page2.goto('https://www.sunpass.com/vector/account/transactions/webtransactionSearch.do'); // Opens page as …Run Code Online (Sandbox Code Playgroud) 我使用此代码来禁用页面加载中的图像,但不起作用:
_page = await _browser.NewPageAsync();
await _page.SetRequestInterceptionAsync(true);
// disable images to download
_page.Request += (sender, e) =>
{
if (e.Request.ResourceType == ResourceType.Image)
e.Request.AbortAsync();
else
e.Request.ContinueAsync();
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我对 Puppeteer 和 JS 非常陌生,但我想知道如何在网页上找到一个元素并在其周围绘制一个边界框,这样如果我进行屏幕截图,该框将可见(我想要整个页面的屏幕截图,但想要还可以查看边界框。
我得到的href元素a
const hrefs = await page.evaluate(() =>
Array.from(document.body.querySelectorAll('a'), ({ href }) => href));
Run Code Online (Sandbox Code Playgroud)
但是当我尝试获取aria-label或data-xx获取div元素时,此方法不起作用。
这是为什么?我如何获取aria-label元素data-xx的属性div?
超文本标记语言
<div class="test" arial-label="something" data-all="something">
</div>
Run Code Online (Sandbox Code Playgroud) 我使用此代码来查找元素并获取其文本:
// helper method to find elements
async function findElementByText(page, tag, searchValue, conditionType) {
const items = await page.$$(tag)
for (var i = 0; i < items.length; i++) {
let valueHandle = await items[i].getProperty('innerText');
let itemText = await valueHandle.jsonValue();
const text = getItemText(itemText);
if(conditionType == 'contains'){
if (text.indexOf(searchValue) !== -1) return items[i]
}else if(conditionType == 'equals'){
if (searchValue == text) return items[i]
}
}
return false;
}
// find an element using helper
let searchResult = await findElementByText(parent, 'span', 'R$', …Run Code Online (Sandbox Code Playgroud) 我需要滚动到 puppeteer 中的元素。如何实现这一目标?我尝试模拟移动设备来检查响应能力
假设我有一个 500 像素宽的元素,称为“选择器”。例如,我将如何点击像素 400?
根据 puppeteer 文档, .hover() 将悬停在元素的中间。当我使用类似的代码对其进行测试时
const selector = await page.$('selector');
await selector.hover();
await selector.click();
Run Code Online (Sandbox Code Playgroud)
果然,它点击了像素 250。很明显,代码存在来实现这一点。我查看了 puppeteer 文档,但找不到我需要的源代码。任何人都可以帮忙吗?
因为我也不知道编程,我知道你可以用不同的方式来做(你可以帮助如何)那么请帮助我,如果我可以以某种方式使用此代码中的字符或(|| 或 &&)?
我希望将多个选择器的结果显示在一行中。
当我这样做时,我得到了结果,但它们分别返回给我 X 和 Y,我想要一个结果:x1 - y1、x2 - y2 等。
const x = await page.$$eval('.classxxx', options => options.map(option => option.textContent));
const y = await page.$$eval('.classsyyyy', options => options.map(option => option.textContent));
console.log(x); // x1, x2, x3
console.log(y); // y1, y2, y3
Run Code Online (Sandbox Code Playgroud)
我希望结果在下一部分中彼此相邻显示
console log(xy); // x1 y1, x2 y2, x3 y3
Run Code Online (Sandbox Code Playgroud)
我一直在考虑类似的事情,但它不起作用:
const y = await page.$$eval('.classsyyyy || .classxxx', options => options.map(option => option.textContent));
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 puppeteer 自动化在 azure 门户上运行的应用程序。输入密码后我收到以下错误,它没有单击提交按钮。
node:55768) UnhandledPromiseRejectionWarning: ReferenceError: browser is not defined
Run Code Online (Sandbox Code Playgroud)
这是我的示例代码:
(async () => {
try {
const launchOptions = { headless: false, args: ['--start-maximized'] };
const browser = await puppeteer.launch(launchOptions);
const page = await browser.newPage();
await page.emulate(iPhonex);
await page.goto('https://apps.testpowerapps.com/play/72ff5b93-2327-404d-9423-92eedb44a287?tenantId=n082027');
//Enter User Name
const [userName] = await page.$x('//*[@id="i0116"]');
await userName.type("jyoti.m@azure.com");
const [loginButton] = await page.$x('//*[@id="idSIButton9"]');
await loginButton.press('Enter');
//Enter Password
const [passWord] = await page.$x('//*[@id="i0118"]');
await passWord.type("Pass123");
const [submitButton] = await page.$x('//*[@id="idSIButton9"]');
await submitButton.press('Enter');
//await page.keyboard.press('Enter');
}
catch(error){
console.error(error); …Run Code Online (Sandbox Code Playgroud) 我在从 devoloper 工具的控制台日志中已存在的站点获取数据时遇到问题。我是 Puppeteer 的新手,所以我试图获取所有这些控制台日志结果,但它们都有字符串类型。你们能帮我找到一种方法来获取真实的对象或者一种解析它并使用它的方法吗,谢谢
puppeteer ×10
javascript ×6
node.js ×4
apify ×1
automation ×1
button ×1
c# ×1
clickable ×1
headless ×1
typescript ×1
web-scraping ×1