Я успешно заставил свой сценарий Puppeteer работать с Highcharts, но только когда я перехожу на страницу, на которой включен скрипт библиотеки highcharts.Я пытаюсь выяснить, как устранить требование HTML-страницы для сценария Puppeteer.Следующий highcharts3.html работает
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Highcharts Test 3</title>
</head>
<body>
<script src="/lib/highcharts/highcharts.js"></script>
<div id="container" style="width:100%; height:400px;"></div>
</body>
</html>
Вот скрипт highcharts3.js
const puppeteer = require('puppeteer')
const fs = require('fs')
console.log('main fs W_OK=' + fs.W_OK)
async function run() {
console.log('run fs W_OK=' + fs.W_OK)
// const browser = await puppeteer.launch({
// headless: true
// })
const browser = await puppeteer.launch({
headless: false,
slowMo: 2000,
devtools: true })
const page = await browser.newPage()
page.on("console", msg => console.log(`Page Console: ${msg.text()}`));
await page.goto('http://localhost:7890/highcharts3.html', {
waitUntil: "domcontentloaded"
})
async function loadChart() {
console.log('loadChart fs W_OK=' + fs.W_OK)
await page.evaluate(async (fs) => {
console.log('page.evaluate fs W_OK=' + fs.W_OK)
console.log('Highcharts.version='
+ Highcharts.version)
var myChart = Highcharts.chart('container', {
chart: {
type: 'bar'
},
title: {
text: 'Fruit Consumption'
},
xAxis: {
categories: ['Apples', 'Bananas', 'Oranges']
},
yAxis: {
title: {
text: 'Fruit eaten'
}
},
series: [{
name: 'Jane',
data: [1, 0, 4]
}, {
name: 'John',
data: [5, 7, 3]
}]
});
}, fs)
}
await loadChart()
await browser.close()
}
run()
Теперь я хочу адаптироватьвыше, чтобы извлечь файл highcharts.js, не через скрипт, включенный в html-страницу, а как-то в самом скрипте кукловода.Вот моя попытка:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Highcharts Test 4</title>
</head>
<body>
<!-- Let's try to do this in the script -->
<!--<script src="/lib/highcharts/highcharts.js"></script>-->
<div id="container" style="width:100%; height:400px;"></div>
</body>
</html>
const puppeteer = require('puppeteer')
const fs = require('fs')
const Highcharts = require('highcharts')
console.log('main fs W_OK=' + fs.W_OK)
console.log('main Highcharts.version=' +
Highcharts().version) //Works
async function run() {
console.log('run fs W_OK=' + fs.W_OK)
console.log('run Highcharts.version=' + Highcharts().version) //Works
// const browser = await puppeteer.launch({
// headless: true
// })
const browser = await puppeteer.launch({
headless: false,
slowMo: 2000,
devtools: true
})
const page = await browser.newPage()
page.on("console", msg => console.log(`Page Console: ${msg.text()}`));
await page.goto('http://localhost:7890/highcharts4.html', {
waitUntil: "domcontentloaded"
})
async function loadChart() {
console.log('loadChart fs W_OK=' + fs.W_OK)
console.log('loadChart Highcharts.version=' +
Highcharts().version) //Works
await page.evaluate(async (Highcharts, fs) => {
//fs is defined because we passed it to page.evaluate
console.log('page.evaluate fs W_OK=' + fs.W_OK)
//The following statement fails with:
//(node:3580) UnhandledPromiseRejectionWarning:
// Error: Evaluation failed:
// TypeError: Highcharts is not a function
console.log('page.evaluate Highcharts.version=' +
Highcharts().version)
//When uncommented in place of the above, fails with:
//Highcharts is undefined
//console.log('page.evaluate Highcharts.version='
// + Highcharts.version)
var myChart = Highcharts.chart('container', {
chart: {
type: 'bar'
},
title: {
text: 'Fruit Consumption'
},
xAxis: {
categories: ['Apples', 'Bananas', 'Oranges']
},
yAxis: {
title: {
text: 'Fruit eaten'
}
},
series: [{
name: 'Jane',
data: [1, 0, 4]
}, {
name: 'John',
data: [5, 7, 3]
}]
});
}, Highcharts, fs)
}
await loadChart()
await browser.close()
}
run()
Ошибка в функции loadChart.Я не могу понять, как требовать Highcharts, чтобы это было видно в объеме страницы.