| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- var createError = require('http-errors');
- var express = require('express');
- var path = require('path');
- var cookieParser = require('cookie-parser');
- var logger = require('morgan');
- const axios = require('axios');
- const playwright = require('playwright');
- const cheerio = require('cheerio');
- var timeout = require('connect-timeout')
- var indexRouter = require('./routes/index');
- var usersRouter = require('./routes/users');
- var app = express();
- // view engine setup
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'jade');
- app.use(logger('dev'));
- app.use(timeout('10s'));
- app.use(express.json());
- app.use(express.urlencoded({ extended: false }));
- app.use(haltOnTimedout);
- app.use(cookieParser());
- app.use(haltOnTimedout);
- app.use(express.static(path.join(__dirname, 'public')));
- app.use('/', indexRouter);
- app.use('/users', usersRouter);
- function haltOnTimedout (req, res, next) {
- if (!req.timedout) next()
- }
- // get text from selector
- app.get("/element/:selector/:url(*)", (req, res, next) => {
- axios.get(req.params.url)
- .then(function (response) {
- var $ = cheerio.load(response.data);
- var element = $(req.params.selector.replace("+", " ")).text();
-
- console.log(element);
- res.json(element);
- })
- .catch(function (error) {
- // handle error
- console.log(error);
- res.json({error: error, params: req.params});
- })
- .then(function () {
- // always executed
- });
- // res.json(req.params);
- });
- // get screenshot
- app.get("/screenshot/:browser/:pos/:width/:url(*)", (req, res, next) => {
- (async () => {
-
- switch(req.params.browser) {
- case 'webkit': {
- var browser = await playwright.webkit.launch();
- break;
- }
- case 'firefox': {
- var browser = await playwright.firefox.launch();
- break;
- }
- default: {
- var browser = await playwright.chromium.launch();
- break;
- }
- }
- const context = await browser.newContext({
- viewport: {
- width: parseInt(req.params.width),
- height: 1080
- }
- });
- var full = false;
- var pos = 0;
- const page = await context.newPage();
- console.log(req.params.width);
- await page.goto(req.params.url);
- if (req.params.pos == "full" || isNaN(req.params.pos)) {
- full = true;
- } else {
- await page.evaluate(async (pos) => {
- for (let i = 0; i < pos; i += 10) {
- window.scrollTo(0, i);
- }
- }, req.params.pos);
- }
-
- const screenshot = await page.screenshot({
- fullPage: full
- });
- //await page.screenshot({ path: `example-${browserType.name()}.png` });
- await browser.close();
- res.contentType('image/png');
- res.end(screenshot, 'binary');
- })().catch(function (error) {
- console.log(error);
- });
- // res.json(req.params);
- });
- // catch 404 and forward to error handler
- app.use(function(req, res, next) {
- next(createError(404));
- });
- // error handler
- app.use(function(err, req, res, next) {
- // set locals, only providing error in development
- res.locals.message = err.message;
- res.locals.error = req.app.get('env') === 'development' ? err : {};
- // render the error page
- res.status(err.status || 500);
- res.render('error');
- });
- module.exports = app;
|