Node.js 如何配置Puppeter以正确呈现外部JS页面?仅适用于本地主机URL
我正在尝试为外部Javascript页面配置服务器端呈现。 我使用Puppeter就是为了这个目的,当我提供任何外部URL(不是本地主机页面)时,Puppeter只获取URL的源代码(您可以在请求页面的查看源代码模式中看到),而不呈现整个DOM。 当我尝试SSR任何localhost Javascript页面URL(由本地主机上的同一个节点js服务器生成的页面)时,一切正常 请告知我是否遗漏了什么,或者我需要尝试另一种方法 我成功地在本地主机上配置了所有依赖项的Puppeter,如下所示: 当前,“html”变量只返回获取的URL的源代码,我需要接收请求URL的完全呈现DOM server.js中的代码Node.js 如何配置Puppeter以正确呈现外部JS页面?仅适用于本地主机URL,node.js,puppeteer,google-chrome-headless,serverside-javascript,Node.js,Puppeteer,Google Chrome Headless,Serverside Javascript,我正在尝试为外部Javascript页面配置服务器端呈现。 我使用Puppeter就是为了这个目的,当我提供任何外部URL(不是本地主机页面)时,Puppeter只获取URL的源代码(您可以在请求页面的查看源代码模式中看到),而不呈现整个DOM。 当我尝试SSR任何localhost Javascript页面URL(由本地主机上的同一个节点js服务器生成的页面)时,一切正常 请告知我是否遗漏了什么,或者我需要尝试另一种方法 我成功地在本地主机上配置了所有依赖项的Puppeter,如下所示: 当前
var puppeter=require('puppeter');
异步函数ssr(url){
console.info('在ssr模式下呈现页面');
const browser=wait puppeter.launch({headless:true});
const page=wait browser.newPage();
试一试{
wait page.goto(url,{waitUntil:'domcontentloaded'});
}捕捉(错误){
控制台错误(err);
抛出新错误('page.goto/waitForSelector超时');
}
const html=wait page.content();
等待浏览器关闭();
返回{html};
}
module.exports=ssr;
app.js中的代码
var err=require('http-errors');
var express=需要(“express”);
var path=require('path');
var-ssr=require('./ssr.js');
var-app=express();
app.listen(3000,function(){console.info('Server listening on port');});
应用程序使用('/index/',异步(req,res)=>{
const{html}=await-ssr(`www.example.com`);
返回res.send(html);
});
试试看
问题很可能是您没有给页面足够的时间来呈现DOM内容<代码>{waitUntil:'domcontentloaded'}只等待事件,不等待任何AJAX请求或DOM修改 尝试使用
'networkidle0'
或'load'
作为函数的waitUntil
值
如果不起作用,您有两个选择:
- 通过使用为页面提供固定的时间来呈现页面
- 用于在调用
之前等待加载特定选择器。这样,您可以确保您感兴趣的文档部分已加载page.content()
const html = 'what ever you selector is but since you want the html just type in "html"';
let gg = await page.evaluate((sel) => {
let element = document.querySelector(sel);
console.log ('got Boom');
return element? element.innerHTML: null;
}, html);
console.log (gg);