无法从带有伪造者的网站上提取某些文本元素。想知道为什么会这样以及如何解决它

时间:2019-10-11 22:40:47

标签: javascript puppeteer

我正在尝试构建一个网络抓取工具来抓取我的项目的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();

})();

0 个答案:

没有答案