Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Puppeter node.js:下载图像时拒绝访问_Node.js_Web Scraping_Puppeteer_Fs_Createwritestream - Fatal编程技术网

Puppeter node.js:下载图像时拒绝访问

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” 我调用

我正在尝试使用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获取站点:相同来源