我查看了“在伪造者中遍历一组URL” ,但我仍然遇到错误。我根据不同的网站尝试了几种不同的方法来做到这一点,而这是最接近工作的一种方法。
当我运行它时,它将打开主页,然后从数组中的第一个URL打开页面。然后我得到错误。我是puppeteer
和电话应用程序开发的新手,所以我希望它有所帮助。
我的代码:
const puppeteer = require('puppeteer'); // live webscraping
let scrape1 = async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
const page1 = await browser.newPage();
let url = 'https://ws.petango.com/webservices/adoptablesearch/wsAdoptableAnimals2.aspx?species=Dog&sex=A&colnum=4&recAmount=75&detailsInPopup=Yes&authkey=rwtmnvh6fros1w6uad3t2btmh5tely62cf62s363tnsgoks4yu&css=https://www.tailshumanesociety.org/wp-content/themes/divi-child/iframe.css'; // link to page
await page.goto(url);
var hrefs=[];
const result = await page.evaluate(() => {
let data = []; // Create an empty array that will store our data
let elements = document.querySelectorAll('.list-animal-info-block'); // Select all Products
var str1="https://ws.petango.com/webservices/adoptablesearch/";
var links=document.getElementsByTagName('a'), hrefs = [];
for (var i = 0; i<links.length; i++)
{
var str2=links[i].href.slice(22,-3);
var wholepath=str1.concat(str2);
hrefs.push(wholepath);
}
return hrefs
});
const urls = result;
const idList = [];
for (let i=0; i < urls.length; i++) {
const url = urls[i];
await page1.goto(url);
await page1.evaluate();
const animalID = await page1.evaluate(() => document.getElementById("lblID").innerHTML);
idList.push(animalID)
browser.close()
}
browser.close()
return idList
};
scrape1().then((value) => {
console.log(value); // Success!
});
错误是:
$节点d1.js (节点:10368)UnhandledPromiseRejectionWarning:错误:预期获得| string |或|功能|作为第一个参数,但改为“未定义”。 在ExecutionContext._evaluateInternal(/Users/wrlwnd/node_modules/puppeteer/lib/ExecutionContext.js:86:13) 在ExecutionContext.evaluate(/Users/wrlwnd/node_modules/puppeteer/lib/ExecutionContext.js:48:23) 在ExecutionContext中。 (/用户/wrlwnd/node_modules/puppeteer/lib/helper.js:112:23) 在DOMWorld.evaluate(/Users/wrlwnd/node_modules/puppeteer/lib/DOMWorld.js:112:20) 在process._tickCallback(内部/进程/next_tick.js:68:7) -异步- 在帧。 (/用户/wrlwnd/node_modules/puppeteer/lib/helper.js:111:15) 在Page.evaluate(/Users/wrlwnd/node_modules/puppeteer/lib/Page.js:782:43) 在Page。 (/用户/wrlwnd/node_modules/puppeteer/lib/helper.js:112:23) 在scrape1(/Users/wrlwnd/Desktop/d1.js:36:21) 在process._tickCallback(内部/进程/next_tick.js:68:7) (节点:10368)UnhandledPromiseRejectionWarning:未处理的承诺被拒绝。
此错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了.catch()未处理的诺言而引起的。 (拒绝ID:2) (节点:10368)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
这也向我显示了
是否要让应用程序“ Chromium.app”接受传入的网络连接?
拒绝或什么都不做。
我使用代码的第一部分来生成URL列表,这些URL指向单个动物的弹出窗口。这样可行。然后,我尝试遍历该列表以打开每个页面,以便抓取信息。计划使用heroku
为应用程序提供API类型的JSON输入。各个动物页面是实时生成的,并且没有API,因此很难做到!谢谢!
答案 0 :(得分:0)
我看到我有两个评价。所以我改变了。它运行。
等待page1.evaluate(); const animalID =等待page1.evaluate(()=> document.getElementById(“ lblID”)。innerHTML);
我仍然收到“您是否希望应用程序“ Chromium.app”接受传入的网络连接?”信息。