我希望我的结果是一个函数,它在浏览器上下文中运行,表现得像一个函数。所以我可以要求它获取不同的资源。然而这个p论点是行不通的。为什么,我该如何解决?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox'], headless: false})
const page = await browser.newPage()
await page.goto('https://hendry.iki.fi')
const p = '/about'
const result = await page.evaluate((p) => {
return fetch(p)
.then((response) => {
if (response.ok) {
return response.text()
}
})
})
console.log(result)
await browser.close()
})()
Run Code Online (Sandbox Code Playgroud) 我正在使用 Puppeteer 为我的家庭项目制作 Facebook Messenger api(有点)。
到目前为止,我可以成功使用 puppeteer 登录我的帐户。
当我想在登录后自动化时,真正的问题就开始了。
我无法点击任何元素。
例如:
我想点击小“我”图标:
然后我复制了选择器,如:
我得到的CONSO以下错误文件:
(node:4771) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError [ERR_ASSERTION]: No node found for selector: #cch_feb64f1b00e628 > div._5742 > ul > li:nth-child(4) > a > div > svg
(node:4771) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Run Code Online (Sandbox Code Playgroud)
代码:
const puppeteer = …Run Code Online (Sandbox Code Playgroud) 我目前正在研究一个项目,在该项目中,我需要构建一个应用程序,该应用程序需要在浏览器中打开URL才能使用其中的某些功能。
为此,我用的木偶,以打开在服务器端的浏览器,所以我可以使用它像一个API一个脚本的NodeJS里面。
这是代码(nodejs):
app.get('/do', (req, res) => {
console.log("ok");
(async() => {
var browser = await puppeteer.launch(
{ args: ['--no-sandbox','--disable-setuid-sandbox'], headless: false });
var page = await browser.newPage();
await page.goto('https://url.com');//i hid the url for personal reason
await page.waitFor(1000); // to wait for 1000ms
await page.waitFor('body div'); // to wait for the 'body div' selector in body
await page.waitFor(() => Math.random() < 0.5); // to wait for the predicate
await page.screenshot({
path: 'public/photo.png'
});
await browser.close();
await res.end('<html><head></title></head><body><h1><img src=photo.png …Run Code Online (Sandbox Code Playgroud) 我尝试从我的数组中逐页浏览,但得到了这个:
(节点:4196)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个请求侦听器。使用 Emitter.setMaxListeners() 增加限制(节点:4196) MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。11 帧分离侦听器添加 d。使用 Emitter.setMaxListeners() 增加限制(节点:4196) MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 个生命周期事件监听器。使用emitter.setMaxListeners() 增加限制(node:4196) UnhandledPromiseRejectionWarning: Error: Protocol error (Page.navigate): Target closed。at Promise (D:\Kutz\irrParse\node_modules\puppeteer\lib\Connection.js:198:56) at new Promise () at CDPSession.send (D:\Kutz\irrParse\node_modules\puppeteer\lib\Connection.js :197:12) 在导航 (D: \Kutz\irrParse\node_modules\puppeteer\lib\Page.js:520:39) 在 Page.goto (D:\Kutz\irrParse\node_modules\puppeteer\lib\Page.js:500:7) 在 uniqueLinks.forEach ( D:\Kutz\irrParse\scrape.js:26:16) at Array.forEach() at D:\Kutz\irrParse\scrape.js:25:15 at process._tickCallback (internal/process/next_tick.js: 118:7) (node:4196) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。(rjection id: 1) (node:4196) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝离子将使用非零退出代码终止 Node.js 进程。(节点:4196)未处理的PromiseRejectionWarning:
const puppeteer = require("puppeteer");
var forEach = require('async-foreach').forEach;
const url = …Run Code Online (Sandbox Code Playgroud) 我想使用 puppeteer 搜索页面并返回所有可用资产,包括图像、pdf、任何可嵌入的内容等。
出于我们的目的,让我们简单地使用图像。img标签有一个src属性,但是通过 CSS 规则加载的图像呢?有没有办法查看加载的资产总数?
我正在使用 Chrome Puppeteer 获取网页上的某些内容。此内容是伪表中的项目列表。我正在使用 XPath 来获取此内容。
当我测试 Xpath 表达式时 [在 Chrome 中使用 XPath Helper Extension] 它显示文本列表,所以我知道 XPath 表达式很好。
但是,我在尝试使用 Puppeteer 执行此操作时遇到了问题。下面是相关代码【我省略了开闭傀儡代码】:
var xpath_expr_str = "//div[contains(@class,'listings')]/div[4]/p/a";
var page_url_str = 'https://my-url';
await page.goto(page_url_str);
await page.waitForXPath(xpath_expr_str);
var xpath_payload_arr = await page.$x(xpath_expr_str);
var xpath_val_arr = await page.evaluate(function(payload_arr){
var url_list_arr = [];
for(var i = 0; i < payload_arr.length; i++)
{
url_list_arr.push(payload_arr[i].textContent);
}
return url_list_arr;
}, xpath_payload_arr);
console.log(xpath_val_arr);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
我似乎无法进入列表。但是,问题是如果我尝试只获取列表中的单个项目,它就可以正常工作。例如,以下代码有效:
var xpath_val_str = await page.evaluate(function(payload_arr){
return payload_arr.textContent;
}, …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行与该人员所做的类似的操作,但是我很难弄清楚如何将Puppeteer屏幕截图的输出直接重定向到S3,因为屏幕截图功能仅具有用于本地目录路径的参数。将图像存储在Lambda上是一种选择,但不是首选。
因此,我正在尝试使用puppeteer迭代一些URL,从HTML内容中获取数据,然后打印出CSV.
我被困在你打印数据的那一部分.现在我只是测试并尝试为每个数据做一个console.log().
我遇到的主要问题是循环运行非常快,打开了大量的浏览器窗口,并且日志全部乱序.
这是我的代码:
const puppeteer = require('puppeteer');
let scrape = async (i) => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.goto(`https://webPageURL.org/list/objects/${i}/`);
await page.waitFor(1000);
const result = await page.evaluate(() => {
let data = document.querySelector('.someClass')
if (data !== null) {
data = data.innerText;
}
return {
data
}
});
await browser.close();
return result;
};
for (var i = 0; i < 10; i++{
scrape(i).then((value) => {
console.log(i, ': ', value);
});
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 node.js 和 puppeteer 来获取一些数据。...现在我想将获取的数据插入到数据库中...使用 mysql。下面似乎工作......但让我感到困惑的是在 console.log('DB 插入成功。记录:'+i); 总是落后,一段时间后它会停止......尽管仍有可用的记录表。
那是我的应用程序:
let tableCell01;
let tableCell01Val;
let tableCell02;
let tableCell02Val;
const tableRows = await page.$$('table.tableFile2 > tbody > tr');
for (let i=1; i < tableRows.length; i++){
tableRow = tableRows[i];
tableCell01 = await tableRow.$('td:nth-child(1) a');
tableCell01Val = await page.evaluate( tableCell01 => tableCell01.innerText, tableCell01 );
tableCell02 = await tableRow.$('td:nth-child(2)');
tableCell02Val = await page.evaluate( tableCell02 => tableCell02.innerText, tableCell02 );
tableCell02ValA.replace(/(^\s+|\s+$)/g,'');
console.log('\n');
console.log('ID: '+tableCell01Val);
console.log('Company: '+tableCell02Val);
console.log('Iterator: '+i);
const insertCompanyList = "INSERT INTO companyList ( company_name, …Run Code Online (Sandbox Code Playgroud) 这是分析的页面https://www.diretta.it/。
在此页面中,接下来几天的内容将随js动态加载,而无需更改网站的URL(您可以在表格的右上角尝试)。
使用puppeteer,并使用以下代码
await page.goto ('https://www.diretta.it/');
Run Code Online (Sandbox Code Playgroud)
它加载今天页面的内容。有没有办法用明天的内容加载页面?我必须从接下来几天的比赛中抓取信息
终端更改日的js可执行文件中的功能是:
> set_calendar_date ('1')
Run Code Online (Sandbox Code Playgroud) puppeteer ×10
javascript ×9
node.js ×8
web-scraping ×3
amazon-s3 ×1
async-await ×1
automation ×1
express ×1
facebook ×1
heroku ×1
mysql ×1
node-mysql ×1
promise ×1
xpath ×1