Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript加载完页面后,如何使用Anglesharp将HTML作为文本获取?_Javascript_C#_Anglesharp - Fatal编程技术网

在javascript加载完页面后,如何使用Anglesharp将HTML作为文本获取?

在javascript加载完页面后,如何使用Anglesharp将HTML作为文本获取?,javascript,c#,anglesharp,Javascript,C#,Anglesharp,我正在尝试使用AngleSharp在本地主机上抓取网页。页面是使用Angular js动态生成的。我正在使用AngleSharp获取页面。还使用AngleSharp脚本库来运行Javascript。以下是我的POC代码。在Javascript呈现完成后,我无法确定在哪里可以找到页面的HTML t、 Result.Source.Text为我提供了该网页的页面源。javascript完成渲染后,在哪里可以找到源代码?我甚至不知道javascript是否运行了 static void Main

我正在尝试使用AngleSharp在本地主机上抓取网页。页面是使用Angular js动态生成的。我正在使用AngleSharp获取页面。还使用AngleSharp脚本库来运行Javascript。以下是我的POC代码。在Javascript呈现完成后,我无法确定在哪里可以找到页面的HTML

t、 Result.Source.Text为我提供了该网页的页面源。javascript完成渲染后,在哪里可以找到源代码?我甚至不知道javascript是否运行了

    static void Main(string[] args)
    {
        Task<IDocument> t = StartCrawl();
        t.Wait();
        string textContent = t.Result.Source.Text;
        Console.ReadKey();

    }

    private static async Task<IDocument> StartCrawl()
    {
        var config = Configuration.Default
            .WithDefaultLoader()
            .WithCss()
            .WithJavaScript();

        var context = BrowsingContext.New(config);
        var document = await context.OpenAsync("http://localhost:8000/#!/phones");
        return document;
    }
static void Main(字符串[]args)
{
任务t=StartCrawl();
t、 等待();
字符串textContent=t.Result.Source.Text;
Console.ReadKey();
}
专用静态异步任务StartCrawl()
{
var config=Configuration.Default
.WithDefaultLoader()
.WithCss()
.WithJavaScript();
var context=BrowsingContext.New(配置);
var document=await context.OpenAsync(“http://localhost:8000/#!/电话);
归还文件;
}
url的视图源给了我这个。如何在页面加载后运行页面上的所有Java脚本。我可以在document.scripts属性中看到16个脚本


谷歌电话库
在AngleSharp中(就像在浏览器中),JS做了一些事情之后,就没有了源代码的概念。您可以查看最初传输的源,但我猜这不是您想要的

如果希望在特定时间(例如,通过JS脚本对DOM进行一些操作后)查看DOM的字符串序列化,只需执行以下操作:

var currentSource = document.ToHtml(); // current serialization of the DOM
请注意,这将以HTML(文本)形式表示DOM

您所做的工作为您提供了原始源代码:

var textContent = t.Result.Source.Text; // will always contain the original source

我没有找到任何好的例子。如果你发现了什么,你能和我们分享吗?谢谢。@mbpakalin我没有再试一次。我希望C#会有办法做到这一点。我建议使用puppeter库(Node.js)。使用它可以更轻松地抓取JS呈现的网页。虽然有点慢,但效果很好。我现在正在c#中使用cefSharp。但是它有点慢。Anglesharp很好,但是文档太差了。如果您发现文档不好,请向@mbpakalin道歉。你会特别改进什么?我很确定JS没有执行。AngleSharp Js仍处于实验阶段,任何高级Js框架都是不可能的。调试控制台应该向您显示错误(取决于您使用的版本,很遗憾您没有指定,但假设它是非常旧的版本,如0.9,您将看不到任何输出)。关于从哪里获取HTML,只需将其序列化即可。看到我的答案了。@FlorianRappl我要好好学习angle sharp并改进你的文档:)你最近回答了我的问题,我在开始提问之前查阅了文档,但我认为文档已经过时了。顺便说一句,效果非常好,非常感谢:)