извините, мой английский не очень хорош.Вопрос:
Я настраиваю новый сервер узлов кукловода, контейнер докеров, для загрузки одной и той же страницы, параметр url не совпадает, и в нем есть изображение кода Qr.цель делает снимок этого изображения кода Qr.И это медленно.Я использую Chrome, перейти на эту страницу вручную быстрее, чем кукловод, есть идеи по сокращению времени загрузки кукловода?спасибо.
server.js это экспресс
const puppeteer = require('puppeteer');
const express = require('express')
const fs = require('fs');
const bodyParser = require('body-parser');
const app = express()
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json({limit: '20mb'}))
var express_timeout = require('connect-timeout'); //express v4
app.use(express_timeout(120000000));
app.use(haltOnTimedout);
function haltOnTimedout(req, res, next){
if (!req.timedout) next();
}
let browser = null;
let browser2 = null;
let quickpage = null;
(async() => {
browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'],
executablePath: '/usr/local/lib/chrome-linux/chrome',
userDataDir: '/tmp/user-data-dir',
headless: true,
});
browser2 = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox'],
executablePath: '/usr/local/lib/chrome-linux/chrome',
userDataDir: '/tmp/user-data-dir',
headless: true,
});
quickpage = await browser.newPage()
await quickpage.setViewport({ width: 1024, height: 768 })
await quickpage.setCacheEnabled(true)
})();
app.post('/htmlOperxxxe/xxx', function (req, res) {
(async() => {
try {
console.log(req.body)
let random_file_name = function (ext, ppath) {
if (!ext) {
ext = 'png'
}
if (!ppath) {
ppath = 'ipxxxne/'
}
return ppath + (new Date()).getTime() + random_str(5) + '.' + ext
}
let time_out = req.body.time_out
let bank_val = req.body.bank_val
if (!bank_val) {
bank_val = 'xxxNL2A'
}
if (!time_out && time_out !== 0) {
time_out = 30000
}
let bank_page_info = {
'xxxANL2A' : {'selector': '.qrcode'},
'IxxxxL2A' : {'selector': '#qrcode'},
'FVLxxxx22' : {'selector': ''},
}
let page = await browser.newPage()
await page.setViewport({ width: 1280, height: 800 })
await page.setCacheEnabled(true)
console.log('init')
await page.goto(req.body.addr, {waitUntil: 'networkidle2', timeout: time_out})
await page.screenshot({ path: random_file_name(), fullPage: false })
console.log('1 done')
let ideal_img_btn = '#paymentMethodBlock > div > img:nth-child(8)'
await page.waitForSelector(ideal_img_btn, { timeout: time_out})
await page.tap(ideal_img_btn);
let bank_select = '#idealIssuer'
await page.waitForSelector(bank_select, { timeout: time_out})
await page.select(bank_select, bank_val)
await page.screenshot({ path: random_file_name(), fullPage: false })
console.log('2 done')
let next_btn = '#nextBtn'
await page.waitForSelector(next_btn, { timeout: time_out})
await page.tap(next_btn)
let qr_code_selector = bank_page_info[bank_val].selector
await page.waitForSelector(qr_code_selector, { timeout: time_out})
await sleep(350)
console.log('3 done')
filename = random_file_name()
// await page.screenshot({ path: filename, fullPage: false })
let qrcode_element = await page.$(qr_code_selector);
await qrcode_element.screenshot({
path: filename
});
await page.close();
let stats = fs.statSync(filename);
res.set({
'Content-Type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename='+filename,
'Content-Length': stats.size
});
// fs.createReadStream(filename).pipe(res);
// fs.unlinkSync(filename);
var file = fs.createReadStream(filename);
file.on('end', function() {
fs.unlink(filename, function() {
// file deleted
});
});
file.pipe(res);
} catch (e) {
console.log('Error occurred', e);
res.status(500).send('PDF generated error:' + e)
}
})();
})
app.listen(9020, function () {
console.log('server is listening on port 9020!')
})