Я собирался просканировать веб-сайт интерфейса vue js, когда пытаюсь просканировать, что он не загружает контент, чтобы приветствовать... что я получал, пустая веб-страница. мой код следующим образом
getSiteContentAsJs = (url) => {
return new Promise((resolve, reject) => {
let j = request.jar();
request.get({url: url, jar: j}, function(err, response, body) {
if (err)
return resolve({body: null, jar: j, error: err});
return resolve({body: body, jar: j, error: null});
});
})
}
Я получил свой контент следующим образом
const { body, jar, error} = await getSiteContentAsJs(url);
//I passed body to cheerio to get the js object out of the web content
const $ = cheerio.load(body);
но там ничего не отображается. но пустая веб-страница. в нем нет содержания.





Я обнаружил, что Cheerio не запускает javascript. так как этот веб-сайт основан на внешнем интерфейсе vue, мне нужен виртуальный браузер, который фактически запускает js и отображает вывод
поэтому вместо использования request я использовал фантом для рендеринга веб-страниц js.
const phantom = require('phantom');
const cheerio = require('cheerio');
loadJsSite = async (url) => {
const instance = await phantom.create();
const page = await instance.createPage();
await page.on('onResourceRequested', function(requestData) {
console.info('Requesting', requestData.url);
});
const status = await page.open(url);
const content = await page.property('content');
// console.info(content);
// let $ = cheerio.load(content);
await instance.exit();
return {$: cheerio.load(content), content: content};
}
теперь я могу получить отображаемую страницу, как показано ниже
const {$, content} = await loadJsSite(url);
// I can query like this
// get the body
$('body').html();
Возможно, вы захотите попробовать puppeteer в следующий раз, я считаю, что phantomjs больше не поддерживается.