Created
March 11, 2019 01:25
-
-
Save writingdeveloper/a58aa6d242e8f6d30b4c6ea4ef038f65 to your computer and use it in GitHub Desktop.
Puppeteer Auto Clien Screencapture App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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