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?