From 43929cffeb550489cc21d4a1c22ea5dab701fafa Mon Sep 17 00:00:00 2001 From: Vitaly Eskov Date: Wed, 19 Sep 2018 20:14:08 +0300 Subject: [PATCH 1/2] Setting cookies values --- src/core/render-core.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/core/render-core.js b/src/core/render-core.js index ef35d717..4c4d9bd0 100644 --- a/src/core/render-core.js +++ b/src/core/render-core.js @@ -81,10 +81,14 @@ async function render(_opts = {}) { await page.emulateMedia('screen'); } - logger.info('Setting cookies..'); - opts.cookies.map(async (cookie) => { - await page.setCookie(cookie); - }); + if (opts.cookies && opts.cookies.length > 0) { + logger.info('Setting cookies..'); + + const client = await page.target().createCDPSession(); + + await client.send('Network.enable'); + await client.send('Network.setCookies', { cookies: opts.cookies }); + } if (opts.html) { logger.info('Set HTML ..'); @@ -142,12 +146,11 @@ async function render(_opts = {}) { const screenshotOpts = _.cloneDeep(_.omit(opts.screenshot, ['clip'])); const clipContainsSomething = _.some(opts.screenshot.clip, val => !_.isUndefined(val)); if (clipContainsSomething) { - screenshotOpts.clip = opts.screenshot.clip + screenshotOpts.clip = opts.screenshot.clip; } data = await page.screenshot(screenshotOpts); } - } catch (err) { logger.error(`Error when rendering page: ${err}`); logger.error(err.stack); From 1114c433b94b54e6c02da16c3bc50735188e22c7 Mon Sep 17 00:00:00 2001 From: Vitaly Eskov Date: Wed, 19 Sep 2018 20:14:41 +0300 Subject: [PATCH 2/2] Test for setting cookie values --- package.json | 3 ++- test/test-all.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 37186b49..b9026c9c 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "eslint-plugin-import": "^2.7.0", "mocha": "^4.0.1", "nodemon": "^1.12.1", - "supertest": "^3.0.0" + "supertest": "^3.0.0", + "pdf2json": "^1.1.7" } } diff --git a/test/test-all.js b/test/test-all.js index a8b7aeb5..903f71c4 100644 --- a/test/test-all.js +++ b/test/test-all.js @@ -5,6 +5,7 @@ const fs = require('fs'); const request = require('supertest'); const BPromise = require('bluebird'); const { getResource } = require('./util'); +const PDFParser = require('pdf2json'); const createApp = require('../src/app'); const DEBUG = false; @@ -129,4 +130,48 @@ describe('POST /api/render', () => { chai.expect(length).to.be.above(30 * 1024 * 1); }) ); + + it('cookies should exist on the page', () => + request(app) + .post('/api/render') + .send({ + url: 'http://www.html-kit.com/tools/cookietester/', + cookies: + [{ + name: 'url-to-pdf-test', + value: 'test successful', + domain: 'www.html-kit.com', + }, { + name: 'url-to-pdf-test-2', + value: 'test successful 2', + domain: 'www.html-kit.com', + }], + }) + .set('Connection', 'keep-alive') + .set('content-type', 'application/json') + .expect(200) + .expect('content-type', 'application/pdf') + .then((response) => { + if (DEBUG) { + console.log(response.headers); + console.log(response.body); + fs.writeFileSync('out.pdf', response.body, { encoding: null }); + } + + const pdfParser = new PDFParser(this, 1); + + pdfParser.on('pdfParser_dataError', (errData) => { + console.error(errData.parserError); + chai.fail(errData.parserError); + }); + + pdfParser.on('pdfParser_dataReady', () => { + const rawContent = pdfParser.getRawTextContent(); + chai.expect(rawContent.indexOf('Number of cookies received: 2')).to.be.above(0); + chai.expect(rawContent.indexOf('Cookie named "url­to­pdf­test"')).to.be.above(0); + chai.expect(rawContent.indexOf('Cookie named "url­to­pdf­test­2"')).to.be.above(0); + if (DEBUG) fs.writeFileSync('./content.txt', rawContent); + }); + }) + ); });