Last active
June 13, 2021 18:35
-
-
Save m-cakir/80fd058bc69fc867ea214c75595e80ec to your computer and use it in GitHub Desktop.
Take snapshot of TradingView chart (+Stochastic RSI) with Puppeteer
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'); | |
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'); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
run it & go to screenshot url