spider - crawling headless browser client
This commit is contained in:
60
index.js
60
index.js
@@ -2,8 +2,10 @@ const express = require("express")
|
||||
, expressLogging = require("express-logging")
|
||||
, logger = require("logops")
|
||||
, hostname = require('os').hostname()
|
||||
, browser = require('./HeadlessBrowser')
|
||||
, port = 32023;
|
||||
, browser = require('./src/service/HeadlessService')
|
||||
, port = 32101
|
||||
, { NoSuchSessionError } = require("selenium-webdriver/lib/error")
|
||||
// , { puppeteerErrors } = require("puppeteer-core/lib/cjs/puppeteer/common/Errors");
|
||||
|
||||
|
||||
logger.getContext = function getContext() {
|
||||
@@ -21,6 +23,58 @@ app.listen(port, () => {
|
||||
logger.info({ app: 'Headless browser' }, 'Startup');
|
||||
});
|
||||
|
||||
|
||||
// process.stdin.resume();//so the program will not close instantly
|
||||
|
||||
exitHandler = (options, exitCode) => {
|
||||
if (options.cleanup) logger.info('cleanup')
|
||||
if (exitCode || exitCode === 0) logger.info('exit code :', exitCode)
|
||||
browser.close().then(() => process.exit());
|
||||
}
|
||||
|
||||
/**
|
||||
* Process shutdown events handling
|
||||
*/
|
||||
//do something when app is closing
|
||||
process.on('exit', exitHandler.bind(null, { cleanup: true }));
|
||||
|
||||
//catches ctrl+c event
|
||||
process.on('SIGINT', exitHandler.bind(null, { exit: true }));
|
||||
|
||||
process.on('SIGTERM', exitHandler.bind(null, { cleanup: true }));
|
||||
|
||||
// setTimeout(() => {
|
||||
// process.on('SIGKILL', exitHandler.bind(null, {exit:true}));
|
||||
// }, 2000)
|
||||
|
||||
|
||||
// catches "kill pid" (for example: nodemon restart)
|
||||
// process.on('SIGUSR1', exitHandler.bind(null, {exit:true}));
|
||||
// process.on('SIGUSR2', exitHandler.bind(null, {exit:true}));
|
||||
|
||||
//catches uncaught exceptions
|
||||
// process.on('uncaughtException', exitHandler.bind(null, {exit:true}));
|
||||
|
||||
/**
|
||||
* request handler
|
||||
*/
|
||||
app.post('/', async (req, res, next) => {
|
||||
browser.real(req.body.url).then(html => res.send(html))
|
||||
const requestPage = () => browser.real(req.body.url).then(html => res.send(html)).catch(e => {
|
||||
if(e instanceof NoSuchSessionError) {
|
||||
browser.reset()
|
||||
logger.error({ reason: e.message, url: req.url }, 'Browser session expired')
|
||||
}else {
|
||||
logger.error({ reason: e.message, url: req.url }, 'Browser error occured')
|
||||
}
|
||||
res.status(500).send({ code: 500, message: e.message })
|
||||
// browser.close().then(() => e instanceof puppeteerErrors.TimeoutError ? setTimeout(() => requestPage(), 3000) : res.status(500).send(e.message))
|
||||
})
|
||||
requestPage()
|
||||
})
|
||||
|
||||
app.get('/restart', (req, res, next) => {
|
||||
// browser.close().then(() => {
|
||||
// res.json({message: 'Browser closed and lanuch with new request'})
|
||||
// })
|
||||
process.exit()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user