Puppeter node.js:下载图像时拒绝访问
我正在尝试使用fs.createWriteStream函数下载图像。我可以下载图像,但它已损坏/损坏。我收到一条错误消息,上面说: “访问被拒绝 您没有访问此服务器上的“https:…”的权限 我在headless:false模式下使用Puppeter,我还将用户代理设置为: “Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/61.0.3163.100 Safari/537.36” 我调用的下载文件的函数如下所示:Puppeter node.js:下载图像时拒绝访问,node.js,web-scraping,puppeteer,fs,createwritestream,Node.js,Web Scraping,Puppeteer,Fs,Createwritestream,我正在尝试使用fs.createWriteStream函数下载图像。我可以下载图像,但它已损坏/损坏。我收到一条错误消息,上面说: “访问被拒绝 您没有访问此服务器上的“https:…”的权限 我在headless:false模式下使用Puppeter,我还将用户代理设置为: “Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/61.0.3163.100 Safari/537.36” 我调用
const https = require("https");
const http = require("http");
const fs = require ("fs");
const path = require("path");
const URL = require("url").URL;
function download (url, filepath,callback,){
const userURL = new URL (url);
const requestCaller = userURL.protocol === "http:" ? http : https;
const filename = path.basename(url);
const req = requestCaller.get(url, function(res){
const fileStream = fs.createWriteStream(path.resolve(filepath,filename));
res.pipe(fileStream);
fileStream.on("error", function(err){
console.log("Error writing to the stream.");
console.log(err);
});
fileStream.on("close",function(){
callback(filename);
});
fileStream.on("finish", function(){
fileStream.close()
});
});
req.on("error", function(err){
console.log("Error downloading the file.");
console.log(err);
});
};
module.exports.download = download;
我尝试下载的图像的URL如下:
似乎我被服务器阻止了,但除了设置用户代理和不在无头模式下运行Puppeter之外,我不知道还能做什么。有什么想法吗
[编辑]
显然,CORS政策存在问题。我检查了网络呼叫,发现如下情况:
const https = require("https");
const http = require("http");
const fs = require ("fs");
const path = require("path");
const URL = require("url").URL;
function download (url, filepath,callback,){
const userURL = new URL (url);
const requestCaller = userURL.protocol === "http:" ? http : https;
const filename = path.basename(url);
const req = requestCaller.get(url, function(res){
const fileStream = fs.createWriteStream(path.resolve(filepath,filename));
res.pipe(fileStream);
fileStream.on("error", function(err){
console.log("Error writing to the stream.");
console.log(err);
});
fileStream.on("close",function(){
callback(filename);
});
fileStream.on("finish", function(){
fileStream.close()
});
});
req.on("error", function(err){
console.log("Error downloading the file.");
console.log(err);
});
};
module.exports.download = download;
推荐人政策:交叉来源时严格来源
sec获取站点:无
然而,当我从浏览器中手动导航时,我得到了以下结果:
推荐人策略:不安全的url
sec获取站点:相同来源
非常感谢 我通过使用npm模块CORS修复了CORS策略中的所有错误。使用“npm安装cors”进行安装,并执行以下操作:
const cors = require('cors');
const app = express();
app.use(cors());
app.options('*', cors());
我猜你混合了两件事:
puppeter
和http请求
。上面的代码所做的是向传递的url
发送一个GET请求,并将响应写入一个文件。如果你想用puppeter
来抓取页面,你应该goto
URL,取而代之的是screenshot
。我不想要截图。我想下载图片。如果我采取截图,它将捕获整个页面,其中有一个黑色的背景。我正在使用https模块请求从前面的链接中获取的图像链接:显然CORS策略存在问题。我检查了网络电话,我看到以下内容:推荐人策略:交叉来源时严格来源。。。。sec fetch site:none,而当我只是从浏览器手动导航时,我得到以下信息:referer Policy:unsafe url。。。。sec获取站点:相同来源