Skip to content

Instantly share code, notes, and snippets.

@writingdeveloper
Created March 11, 2019 01:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save writingdeveloper/a58aa6d242e8f6d30b4c6ea4ef038f65 to your computer and use it in GitHub Desktop.
Save writingdeveloper/a58aa6d242e8f6d30b4c6ea4ef038f65 to your computer and use it in GitHub Desktop.
Puppeteer Auto Clien Screencapture App
const puppeteer = require('puppeteer');
let prevNumber;
function again() {
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Adjustments particular to this page to ensure we hit desktop breakpoint.
page.setViewport({
width: 1920,
height: 100000,
deviceScaleFactor: 1
});
if (prevNumber === undefined) {
await page.goto('https://www.clien.net/service/group/community', {
waitUntil: 'networkidle2'
})
} else {
let data = await page.evaluate(() => {
return {
postNumber: document.getElementsByClassName('list_item symph_row')[0].attributes[3].value
};
});
if (prevNumber === data.postNumber) {
console.log(`NO DATA Now in POST NUMBER : ${data.postNumber}`)
} else {
await page.goto(`https://www.clien.net/service/board/park/${data.postNumber}`, {
waitUntil: 'networkidle2'
});
prevNumber = data.postNumber + 1;
/**
* Takes a screenshot of a DOM element on the page, with optional padding.
*
* @param {!{path:string, selector:string, padding:(number|undefined)}=} opts
* @return {!Promise<!Buffer>}
*/
async function screenshotDOMElement(opts = {}) {
const padding = 'padding' in opts ? opts.padding : 0;
const path = 'path' in opts ? opts.path : null;
const selector = opts.selector;
if (!selector)
throw Error('Please provide a selector.');
const rect = await page.evaluate(selector => {
const element = document.querySelector(selector);
if (!element)
return null;
const {
x,
y,
width,
height
} = element.getBoundingClientRect();
return {
left: x,
top: y,
width,
height,
id: element.id
};
}, selector);
if (!rect) {
console.log(`404 ERROR IN NUMBER : ${prevNumber-1}`)
throw Error(`Could not find element that matches selector: ${selector}.`);
}
return await page.screenshot({
path,
clip: {
x: rect.left - padding,
y: rect.top - 100 - padding,
width: rect.width + padding * 2,
height: rect.height + 100 + padding * 2
}
});
}
await screenshotDOMElement({
path: `./image/${data.postNumber}.png`,
selector: '.post_view',
padding: 5
});
// browser.close();
}
}
browser.close();
})();
}
setInterval(again, 5000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment