我正在尝试构建一个网络抓取工具来抓取我的项目的venmo页面。我可以让puppeteer打开页面并导航到我的页面,以及通过存储chrome用户数据进行登录,但是我试图拉近我被汇款的时间和交易的价值。仅特别是我最近的交易。
我知道该刮板可以工作,并且会向我返回值,因为我创建了一个新的document.quereySelector,将我的名字从站点顶部刮了下来。当我运行不带.innerHTML或.innerText的脚本时,没有抛出任何错误,但是我要查找的两个值(不是我的名字)返回null,但我的名字返回了我。当我添加.innerHTML或.innerText时,我会抛出一个错误
valuation failed: TypeError: Cannot read property 'innerHTML' of null
at __puppeteer_evaluation_script__:4:58
我已经在我的inspect元素的控制台中运行了我的元素,并且它们都返回给我,所以我很难理解为什么网页上的控制台会返回它们,但是我的脚本不会。操纵p的人创建的不仅仅是Chromium窗口,这是因为我也已经在该控制台中输入了document.quereySelector,并且它返回了应有的状态。
const puppeteer = require('puppeteer');
//sets url to nav to
const url = 'https://venmo.com/user';
(async () => {
//open broswer window and opens a new page
const browser = await puppeteer.launch({headless: false, args: ["--user-
data-dir=./Google/Chrome/User Data/"]});
try{
const page = await browser.newPage();
//sets view to 1920x1080
await page.setViewport({ width: 1280, height: 720});
//navigates to the specified url
await page.goto(url,{waitUntil: 'domcontentloaded'});
//playing with wait states incase the document wasnt loading correctly
await page.waitFor(1000);
//function for evaluating the webpage
const data = await page.evaluate(() => {
let amount =
document.querySelector('span.bold.medium.green').innerHTML
let timePayed = document.querySelector('a.grey_link').innerHTML
//this function prints my name
let test = document.querySelector('span.bold').innerHTML
return {
amount,
timePayed,
test
}
});
//displays the data scraped
console.log(data);
}
catch(err) {
console.error(err.message);
}
debugger;
await browser.close();
})();