Caching 使用Puppeter截图本地文件,但它';她还在做网络请求吗?

Caching 使用Puppeter截图本地文件,但它';她还在做网络请求吗?,caching,puppeteer,headless,Caching,Puppeteer,Headless,我正在使用木偶演员为我的公司拍摄网页截图。我需要测试多个人的帐户,这意味着访问页面多次(本例中为150次)。这导致我们的防火墙因为我提出了太多的请求而将我逐出 我的解决方案是只获取页面内容并将其保存在本地。然后我在本地文件上使用puppeter,覆盖用于从服务器获取数据的函数,而只使用已经从CSV加载到节点中的数据 所有这些都可以工作,但看起来它仍然在向我们的服务器发出请求 我尝试给它一个userDataDir,这样它就可以缓存任何资源。理论上,如果它是从文件://加载的,它会缓存资源,并且没有

我正在使用木偶演员为我的公司拍摄网页截图。我需要测试多个人的帐户,这意味着访问页面多次(本例中为150次)。这导致我们的防火墙因为我提出了太多的请求而将我逐出

我的解决方案是只获取页面内容并将其保存在本地。然后我在本地文件上使用puppeter,覆盖用于从服务器获取数据的函数,而只使用已经从CSV加载到节点中的数据

所有这些都可以工作,但看起来它仍然在向我们的服务器发出请求

我尝试给它一个
userDataDir
,这样它就可以缓存任何资源。理论上,如果它是从
文件://
加载的,它会缓存资源,并且没有Ajax请求,它不应该发出任何进一步的请求,对吗

我还尝试安装调试代理,但由于它是https,所以我看不到它试图请求什么

我是这样开始的:

puppeter.launch({
userDataDir:“temp/”
})
。然后(浏览器=>{
下一步(浏览器、链接);
)
.catch(错误=>{
cb(错误,空);
});
next
将遍历它需要访问的任何链接

此部分在本地保存页面:

if(此.\u linkCache[baseLink]==未定义){
获取(基本链接)
.然后(resp=>resp.text())
。然后(内容=>{
writeFile(fullFileName,contents,'utf8',err=>{
如果(错误){
cb(err,null);
}否则{
此._linkCache[baseLink]=fileUrl;
gotoPage(fileUrl);
}
});
})
.catch(错误=>{
cb(错误,空);
});
}
//转到缓存版本
否则{
gotoPage(this._linkCache[baseLink]+查询参数);
}
下面是屏幕截图:

const gotoPage=async(url)=>{
试一试{
const page=wait browser.newPage();
//重写“fetchAccountData”函数
等待页面。evaluateOnNewDocument(testData=>{
窗口[“fetchAccountData”]=(cb:(错误:任意,数据:任意)=>void)=>{
cb(null,testData);
};
},数据);
//转到第页并获取屏幕截图
等待页面。转到(url);
const screenie=`${outputPath}${uuid()}.png`;
屏幕截图({fullPage:true,path:screenie,键入:“png”});
pageHtml.push(``);
下一步(浏览器,rest);
}捕获(e){
cb(e,空);
}
};
我希望这将能够在开始时只发出几个请求,同时将html保存在本地并缓存所有资源,但它似乎会对每个链接发出请求


如何阻止它?

如果这是你的意思,你就不能从本地主机登录网站。这不是它的工作方式。你需要获得一个代理列表,并使用这些代理使用不同的IP发送你的请求,这样你就不会被阻止。此外,你可能需要清除每个帐户的cookie。我不想登录,我只是想获得一个scr页面截图。页面上填充了帐户数据,但我在获取屏幕截图时欺骗了它,使其无法发出服务器请求。换句话说,我拥有所有HTML、JS和数据,可以在本地完成所有操作,而无需发出任何web请求,但它仍在执行这些操作,我正在尝试找出我遗漏的内容。如果你的电脑中有所有文件,可以在本地加载页面,只需断开电脑与Internet的连接程序运行时,首先必须下载文件。我尝试断开连接,但它仍在尝试发出web请求。我试图理解为什么它在本地存储html/js/css时发出web请求,b)ajax请求被删除,它正在本地加载数据,c)Puppeter正在缓存它获取的资源。我知道它正在发出请求,因为我可以使用代理看到它们,但由于它是https,我无法知道它正在尝试加载什么。如果我能找出它仍然试图发出请求的原因,我可能会更接近一个解决方案。你不能登录到Web如果这是您的意思,请从localhost发送。这不是它的工作方式。您需要获取代理列表,并使用这些代理使用不同的IP发送您的请求,这样您就不会被阻止。此外,您可能需要清除每个帐户的Cookie。我不尝试登录,我只是尝试获取页面的屏幕截图。页面上填充了acc装载数据,但我在获取屏幕截图时欺骗了它,使其没有发出服务器请求。换句话说,我有所有的HTML、JS和数据,我需要在本地完成所有操作,而不必发出任何web请求,但它仍在执行这些操作,我正试图找出我缺少的内容。如果你的pc中有所有文件,并且可以加载本地页面,只需断开电脑与Internet的连接程序运行时,首先必须下载文件。我尝试断开连接,但它仍在尝试发出web请求。我试图理解为什么在a)html/js/css存储在本地时,它会发出web请求,b)删除ajax请求并加载数据ally和c)Puppeter正在缓存它所获得的资源。我知道它正在发出请求,因为我可以使用代理看到它们,但由于它是https,我无法知道它试图加载什么。如果我能找到它仍然试图发出请求的原因,我可能会更接近解决方案。