Есть ли какой-нибудь способ, которым я могу выполнить мою программу js и puppeteer узла с помощью exe-файла? - PullRequest
0 голосов
/ 28 июня 2019

Эта программа хорошо работает на кукловода, когда я использую его на CMD.Хотя это длительный процесс и сложный для любого нетехнического человека.Я хочу создать исполняемый файл, который выполняет задачу, которую я выполняю вручную, для запуска этого файла node.js в CMD.Как вы видите, сначала моя программа откроет браузер и перейдет к (URL).Я хочу сделать другую программу с другим URL.Так что, если человек хочет запустить этот код, он просто нажимает exe-файл, и тогда это программное обеспечение автоматически выполнит эту задачу для пользователя.

const puppeteer = require('puppeteer');

async function getPic() {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.setViewport({width: 2576, height: 4134})
  await page.goto('http://absoluteindianews.com/epaper- 
  en/index.php/epaper/edition/906/delhi-edition');
for (let i=1; i<=8; i++){
  await page.click('#page_area > a > img');
  await page.waitFor(4000);

  await page.screenshot({path: 'C:/Users/biznis/Desktop/automatic 
  downloading/Puppeteer/AbsoluteIndia/Delhi/Delhi'+ i +'.png'});

  await page.waitFor(2000);
  await page.click('#cboxLoadedContent > img');

  await page.waitFor(2000);
if(i<8) {
  await page.click('#yw1 > li.next > a');
}
  await page.waitFor(2000);
};

  await page.setViewport({width: 2576, height: 4134})
  await page.goto('http://absoluteindianews.com/epaper- 
  en/index.php/epaper/edition/905/mumbai-edition');
for (let i=1; i<=8; i++){
  await page.click('#page_area > a > img');
  await page.waitFor(4000);

  await page.screenshot({path: 'C:/Users/biznis/Desktop/automatic 
  downloading/Puppeteer/AbsoluteIndia/Mumbai/Mumbai'+ i +'.png'});
  await page.waitFor(2000);
  await page.click('#cboxLoadedContent > img');

  await page.waitFor(2000);
if(i<8) {
  await page.click('#yw1 > li.next > a');
}
  await page.waitFor(2000);
};

  await page.setViewport({width: 2576, height: 4134})
  await page.goto('http://absoluteindianews.com/epaper- 
  en/index.php/epaper/edition/904/bhopal-absolute');
for (let i=1; i<=8; i++){
  await page.click('#page_area > a > img');
  await page.waitFor(4000);

  await page.screenshot({path: 'C:/Users/biznis/Desktop/automatic 
  downloading/Puppeteer/AbsoluteIndia/Bhopal/Bhopal'+ i +'.png'});
  await page.waitFor(2000);
  await page.click('#cboxLoadedContent > img');

  await page.waitFor(2000);
if(i<8) {
  await page.click('#yw1 > li.next > a');
}
  await page.waitFor(2000);
};

  await browser.close();
}

getPic();   

1 Ответ

0 голосов
/ 29 июня 2019

Есть несколько способов решить эту проблему, и записать их в один ответ невозможно.Однако я могу предоставить некоторые рекомендации выше nexe и electron.Также есть enclosejs и pkg.

В обоих нижеприведенных решениях одно из самых важных правил - не связывать вашу папку node_modules.Бинарный хром не будет работать, если вы его объедините.

Nexe

Вы можете использовать nexe .Который загрузит и свяжет ваш скрипт nodejs в один исполняемый файл.Установите его глобально,

npm i -g nexe

Затем создайте сценарий кукловода.вот пример файла,

const puppeteer = require("puppeteer");

async function scraper(url) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  const title = await page.title();
  await browser.close();
  return title;
}

scraper("http://example.com").then(console.log);

Теперь свяжите его, используя,

nexe index.js

Наконец, скопируйте папку node_modules и связанный исполняемый файл файл для вашего клиента.

Электрон

Вы можете иметь хороший графический интерфейс с электроном и создать исполняемый файл, используя строитель электронов.

PS: GUI является необязательным и не является частью этого ответа.Это просто чтобы показать, как вы можете иметь исполняемый файл для вашего клиента, который может сделать гораздо больше, чем просто запустить браузер.

Я не буду вдаваться в то, что такое электрон и как он работает, вместо этого я 'Я буду использовать пример быстрого запуска.Если вы хотите получить окончательный код, проверьте этот репо .

Сначала клонируйте быстрый старт репо,

git clone https://github.com/electron/electron-quick-start

Затем установите кукловода и строителя электронов,

yarn add puppeteer
npm i -g electron-builder

Теперь отредактируйте main.js и добавьте nodeIntegration: true к webPreferences,

mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      nodeIntegration: true // <-- this line
    }
})

Теперь отредактируйте index.html и добавьте кнопку и контейнер результатов,

<p><button>Get Result</button><div id="result"></div></p>

Отредактируйте renderer.js и вставьте образец кода, который мы использовали в следующем примере.Дополнительно используйте эти строки,

document.querySelector("button").addEventListener("click", async function() {
  const result = await scraper("http://example.com");
  document.querySelector("#result").innerHTML = result;
});

Теперь откройте package.json и добавьте эти параметры, чтобы мы могли запустить двоичный файл хрома,

"build": {
    "extraResources": "node_modules",
    "files": [
      "!node_modules"
    ]
}

Теперь соберите приложение,

electron-builder

Откройте папку dist, и вы получите свои пакеты приложений.Вы можете запустить и получить результат,

enter image description here

...