Skip to content

Instantly share code, notes, and snippets.

@m-cakir
Last active June 13, 2021 18:35
Show Gist options
  • Save m-cakir/80fd058bc69fc867ea214c75595e80ec to your computer and use it in GitHub Desktop.
Save m-cakir/80fd058bc69fc867ea214c75595e80ec to your computer and use it in GitHub Desktop.
Take snapshot of TradingView chart (+Stochastic RSI) with Puppeteer
const puppeteer = require('puppeteer');
const ignoreHTTPSErrors = true;
const _sharedBrowser = puppeteer.launch({
ignoreHTTPSErrors,
headless: true,
slowMo: 250,
args: [
'--single-process',
'--no-zygote',
'--no-sandbox',
'--disable-setuid-sandbox'
]
});
let _browser = null;
const _tearDown = () => {
if (_browser) {
_browser.disconnect();
_browser = null;
console.log(`browser disconnected`);
}
};
const _createChartURL = (pair) => `https://en.tradingview.com/chart/?symbol=BINANCE:${pair}&interval=5&theme=dark`;
const _takeScreenshot = async (symbol) => {
let screenshot = null;
if (!symbol) {
console.log('screenshot skipped, symbol is invalid');
return screenshot;
}
try {
const browserWSEndpoint = (await _sharedBrowser).wsEndpoint();
_browser = await puppeteer.connect({ browserWSEndpoint, ignoreHTTPSErrors });
const page = await _browser.newPage();
await page.evaluateOnNewDocument(val => {
localStorage.setItem('tradingview.editchart.model.style', 1);
localStorage.setItem('tradingview.editchart.model.interval', 5);
localStorage.setItem('tradingview.current_theme.name', 'dark');
localStorage.setItem('tradingview.editchart.model.symbol', val);
localStorage.setItem('tradingview.studyMarket.favorites', '["STD;Stochastic_RSI"]');
}, `BINANCE:${symbol}`);
await page.goto(_createChartURL(symbol), { waitUntil: 'networkidle2', timeout: 0 });
console.log(`page loaded for ${symbol}`);
await page.waitForTimeout(300);
// show indicators dialog & add stochastic-rsi
await page.evaluate(() => document.querySelector('#header-toolbar-indicators div[data-role="button"]').click());
await page.waitForTimeout(1000);
await page.evaluate(() => document.querySelector('div[data-id="STD;Stochastic_RSI"]').click());
await page.waitForTimeout(2000);
await page.evaluate(() => document.getElementById('header-toolbar-screenshot').click());
await page.waitForTimeout(3000);
screenshot = await page.evaluate(() => document.querySelector('div[data-dialog-type="take-snapshot-modal"] input[readonly]').value);
console.log(`screenshot taken for ${symbol}, screenshot=${screenshot}`);
await page.waitForTimeout(300);
await page.close();
console.log(`page closed for ${symbol}`);
} catch (err) {
console.error(err);
} finally {
_tearDown();
}
return screenshot;
};
// run it
(async () => {
await _takeScreenshot('BTCUSDT');
})();
@m-cakir
Copy link
Author

m-cakir commented Jun 13, 2021

run it & go to screenshot url

Output

Screenshot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment