Javascript 如何强制Puppeter等待XMLHttpRequests结束,等等,并获得DOM的完整版本?

Javascript 如何强制Puppeter等待XMLHttpRequests结束,等等,并获得DOM的完整版本?,javascript,dom,puppeteer,Javascript,Dom,Puppeteer,我目前有一个网页,通过XMLHttpRequest动态加载一些元素。下面是它的javascript部分的样子: function loadHtmlSnippet(filename, callback) { var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { parser =

我目前有一个网页,通过
XMLHttpRequest
动态加载一些元素。下面是它的javascript部分的样子:

function loadHtmlSnippet(filename, callback) {
    var xmlHttp = new XMLHttpRequest();

    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            parser = new DOMParser()
            minidoc = parser.parseFromString(xmlHttp.responseText, "text/html")
            minibody = minidoc.getElementsByTagName('body')[0]
            callback(minibody)
        }
    };

    xmlHttp.open("GET", 'http://localhost:3000/' + filename, true);
    xmlHttp.send(null);
}
这是用来打电话的,比如

loadHtmlSnippet('my_extra_html_piece.html', my_appropriate_callback)
…其中,
my_-property\u callback
是一个函数,它将
my_-extra\u-html\u-piece.html
DOM插入主页DOM的某个适当位置

到目前为止一切顺利,一切顺利

接下来,我想在加载结束后,以字符串的形式获得完成的DOM。我一直在尝试使用Chromium
Puppeter
。以下是我的Puppeter node.js脚本:

const express = require('express')
const puppeteer = require('puppeteer')

url = process.argv[2]

async function ssr(url) {
    const browser = await puppeteer.launch({
        headless: true
    });
    const page = await browser.newPage();
    await page.goto(url, {
        waitUntil: 'networkidle0'
    });
    html = await page.content();
    await browser.close();
    return html;
}

async function start() {
    html = await ssr(url)
    console.log(html)
}

start()
(我基本上是从木偶演员教程中剪切粘贴的。)

唉,上面的脚本在一些javascript处理完成后返回DOM,但不是在
XMLHttpRequest
s完成加载并将它们各自的HTML插入主DOM之后

在保存呈现的html并关闭之前,有没有办法强迫木偶演员等待javascript真正完成旋转

====


旁白:我在中讨论的序列化方法方面有一些运气,但由于我在其他方面使用Puppeter,如果我也能通过Puppeter完成DOM序列化的这一部分,那就太好了。(所以这个问题是针对木偶演员的。)

wait page.waitForNavigation({waitUntil:'domcontentloaded'})

你可以用“谢谢”,似乎就是这样。(文档边缘有点粗糙,尽管下面提到的
page.waitForNavigation
有更好的文档,用于类似的选项。)在某些方面
page.waitForRequest
可能更有用:我可以安装一个虚拟的XMLHttpRequest,javascript只有在决定一切都完成后才会启动,木偶演员会等着的!(问题是,
响应
之后可能会有一些稍多的页面处理,我不想丢失。)
page.waitForRequest
start当您请求start时,您得到一个
request
obj,您需要访问方法
request.response()
获取
响应
obj,您可以使用
Response.text()
获取字符串,但使用
页面即可。waitForResponse
您将直接获取
响应
obj。。。也许你不需要@kip建议的
Request
objwaitForResponse不起作用?我认为@kip建议的
page.waitForResponse
(甚至是
page.waitForRequest
),可能更合适,但我会接受你的回答,因为你只有23个名声:)