Вам нужен сервер , который будет запускать скребок по требованию.
Любой скребок, использующий настоящий браузер (например, Chromium), должен работать в операционной системе, которая его поддерживает.Другого пути нет.
Подумайте об этом,
- Поддерживает ли ваш мобильный телефон хром и nodeJS?Это не.Для мобильных устройств нет сборки chromium, которая бы поддерживала автоматизацию с помощью nodeJS (пока).
- Можете ли вы запустить браузер в другом браузере?Вы не можете.
Способ 1: Удаленный wsEndpoint
Существуют некоторые услуги, которые предлагают wsEndpoint
, но я не буду упоминать их здесь.Я опишу, как вы можете создать свой собственный wsEndPoint и использовать его.
Запустите браузер и получите wsEndpoint
Следующий код будет запускать экземпляр кукловода при каждом подключении к нему.Вы должны запустить его на сервере.
const http = require('http');
const httpProxy = require('http-proxy');
const proxy = new httpProxy.createProxyServer();
http
.createServer()
.on('upgrade', async(req, socket, head) => {
const browser = await puppeteer.launch();
const target = browser.wsEndpoint();
proxyy.ws(req, socket, head, { target })
})
.listen(8080);
Когда вы запускаете это на сервере / терминале, вы можете использовать ip сервера для подключения.В моем случае это ws://127.0.0.1:8080
.
Использование puppeteer-web
Теперь вам нужно будет установить puppeteer-web в ваше мобильное / веб-приложение.Чтобы связать Puppeteer с помощью Browserify, следуйте приведенным ниже инструкциям.
Клон репозитория Puppeteer:
git clone https://github.com/GoogleChrome/puppeteer && cd puppeteer
npm install
npm run bundle
Это создаст ./utils/browser/puppeteer-web.js
файл, содержащий комплект Puppeteer.
Вы можете использоватьпозже на вашей веб-странице вы сможете управлять другим экземпляром браузера через конечную точку WS:
<script src='./puppeteer-web.js'></script>
<script>
const puppeteer = require('puppeteer');
const browser = await puppeteer.connect({
browserWSEndpoint: '<another-browser-ws-endpont>'
});
// ... drive automation ...
</script>
Способ 2. Используйте API
. Я буду использовать express
для минимальной настройки.Предположим, что ваша функция scrape
экспортирована в файл с именем scrape.js
, и у вас есть следующий файл index.js
.
const express = require('express')
const scrape= require('./scrape')
const app = express()
app.get('/', function (req, res) {
scrape().then(data=>res.send({data}))
})
app.listen(8080)
Это запустит экспресс-API на порту 8080.
Теперь, если вы запускаете его с node index.js
на сервере, вы можете вызвать его из любого мобильного / веб-приложения.
Полезные ресурсы
Я немного повеселился с кукловодом и веб-пакетом,
СохранитьAPI работает, вам нужно будет немного узнать о бэкенде и о том, как поддерживать работу сервера и т. д. См. эти ссылки для полного понимания создания сервера и многое другое,