Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

306
Visualizações
In node.js, how to write binary data from fetch into a file?

Let's say I want to save an image to disk.

var path = require('path');
var webdriver = require("selenium-webdriver");
var chrome = require('selenium-webdriver/chrome');
var By = webdriver.By;
var until = webdriver.until
const fs = require("fs");
var o = new chrome.Options();
o.addArguments("--disable-web-security");
var browser = new webdriver.Builder().forBrowser('chrome').setChromeOptions(o).build();

fetch("https://upload.wikimedia.org/wikipedia/commons/9/9d/Blue_Flower.png");

This doesn't work, fetch is not defined.

I then tried adding fetch into browser.executeScript

var promise1 = browser.executeScript(`return fetch("https://upload.wikimedia.org/wikipedia/commons/9/9d/Blue_Flower.png");`)
promise1.then((x) => x.arrayBuffer()).then((buffer) => fs.writeFile("flower.png", buffer, () => console.log("done")))

This doesn't work. It turns out that when executeScript returns an object, all functions in the object are replaced with {}.

I then tried returning the buffer from executeScript.

var promise1 = browser.executeScript(`return fetch("https://upload.wikimedia.org/wikipedia/commons/9/9d/Blue_Flower.png").then((x) => x.arrayBuffer());`)
promise1.then((buffer) => fs.writeFile("flower.png", buffer, () => console.log("done")))

Still doesn't work. It turns out that buffer becomes {};

Is there some way I can access the arrayBuffer without it turning into {} after it comes out of executeScript?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

const res = await fetch(url);
const fileWriteStream = fs.createWriteStream('/directory/path.ext');
res.body.pipe(fileWriteStream);
about 4 years ago · Juan Pablo Isaza Relatório

0

I managed to do it by using base64. I used code from this answer :

var promise1 = browser.executeScript(`return fetch("https://upload.wikimedia.org/wikipedia/commons/9/9d/Blue_Flower.png").then((x) => x.arrayBuffer()).then(function(buffer){
    var blob = new Blob([buffer])

var reader = new FileReader();
reader.readAsDataURL(blob);
    
    return reader
}).then(function(reader){
    return new Promise(function(x, y){
        this.addEventListener("loadend", function(){
            x(this);
        }.bind(this))
    }.bind(reader)); 
}).then(function(reader){
    return reader.result.slice(reader.result.indexOf(",")+1);
})  
`)
promise1.then(function(b64data){
    let buff = Buffer.from(b64data, 'base64');
    fs.writeFileSync("flower.png", buff);
    console.log("done");
})
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda