如何获得页面的HTML源代码,所有它的脚本被称为后?

问题描述 投票:0回答:1

我'尝试解析站点。使用脚本和数据库加载从数据的网站(我想)(动态?)。这是我的问题......我想抓住通过C#的数据(不幸的是我没有访问代码现在)或JS。而现在似乎无论是C#和JS,获得该网站的唯一模板,但不要等到所有的脚本执行。所以这是我的问题,有没有什么办法让所有的HTML源?也许在某种程度上调用脚本。或发出请求,等待10秒钟,然后HTML源数据写入到变量?

这是我的JS代码。

function request(link)
{

    var xhr = new XMLHttpRequest();

    xhr.open('GET', link, true);

    xhr.onreadystatechange = function() . 
        {console.log(xhr.readyState);};

    xhr.send();

    let data  = xhr.responseText;

    var tempDiv = document.createElement('div');
    tempDiv.innerHTML = data.replace(/<script(.|\s)*?\/script>/g, 
        '');

    return tempDiv;
}

function loadFile(url, timeout, callback) 
{
    var args = Array.prototype.slice.call(arguments, 3);
    var xhr = new XMLHttpRequest();
    xhr.ontimeout = function () {
        console.error("The request for " + url + " timed out.");
        };
    xhr.onload = function() {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                callback.apply(xhr, args);
            } else {
                console.error(xhr.statusText);
            }
        }
    };
    xhr.open("GET", url, true);
    xhr.timeout = timeout;
    xhr.send(null);

    let data  = xhr.responseText;
    return data;
}

function showMessage (message) {
    console.log(message + this.responseText);
}

function include(scriptUrl)
{
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", scriptUrl);
    xmlhttp.onreadystatechange = function()
    {
        if ((xmlhttp.status == 200) && (xmlhttp.readyState == 4))
       {
            eval(xmlhttp.responseText);
       }
    };
    xmlhttp.send();

    let data  = JSON.parse(xmlhttp.responseText);

    var tempDiv = document.createElement('div');
    tempDiv.innerHTML = data.replace(/<script(.|\s)*?\/script>/g, 
     '');

    return tempDiv;
}

我想这一切功能不起作用。

javascript c# html parsing xmlhttprequest
1个回答
1
投票

这是不是真的实用 - 你要加载HTML页面,所有相关的脚本,然后将HTML网页上运行它们,就好像他们是在一个合适的浏览器环境,但是你现有的浏览器会话中。

这样的事情是,如果你是在服务器端(的NodeJS)运行jsdom库是可行的,因为它模拟浏览器行为:https://github.com/jsdom/jsdom。所以,你可以做

JSDOM.fromURL("https://example.com/", { runScripts: "dangerously" }).then(dom => {
   console.log(dom.serialize()); //turn the page back into HTML
});

......让整个事情。

© www.soinside.com 2019 - 2024. All rights reserved.