C#.NET : Scraping dynamic (JS) websites

标签 c# .net selenium-webdriver web-scraping phantomjs

经过几个小时的失败,我来到这里。我需要抓取一个动态生成的网页(使用 Vue.JS 制作,但我不想共享链接)。

我尝试了多种方法( 123 )。它们都不适用于此网页。

最有前途的解决方案是使用 Selenium 和 PhantomJS。我是这样试过的,但我不确定为什么它对谷歌不起作用:

private void button1_Click(object sender, EventArgs e) {
        PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
        service.IgnoreSslErrors = true;
        service.LoadImages = false;
        service.ProxyType = "none";

        var driver = new PhantomJSDriver(service); // I also tried: new PhantomJSDriver();
        driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10);
        driver.Url = "https://google.com";
        driver.Navigate();

        var source = driver.PageSource;
        textBox1.AppendText(source);
}

无效:

enter image description here

我也尝试过使用 WebBrowser 控件,但页面从未完全加载:

(编辑:我发现 WebBrowser 只是实例化 IE,在尝试在独立 IE 浏览器中打开目标网站后,该网页也从未完全加载,因此看到相同的行为是有意义的在 WebView 中。由于这个事实,我认为我必须使用 Selenium 和 PhantomJS。)

enter image description here

当然这不应该这么复杂。如何正确执行?

最佳答案

如果你需要抓取一个网站,你可以使用 ScrapySharp 抓取框架。您可以将其作为 nuget 添加到项目中。 https://www.nuget.org/packages/ScrapySharp/

安装包 ScrapySharp - 版本 2.6.2

它有许多有用的属性来访问页面上的不同元素。例如,要访问页面的整个 HTML,您可以使用以下内容:

        ScrapingBrowser Browser = new ScrapingBrowser();
        WebPage PageResult = Browser.NavigateToPage(new Uri("http://www.example-site.com"));
        HtmlNode rawHTML = PageResult.Html;
        Console.WriteLine(rawHTML.InnerHtml);
        Console.ReadLine();

关于C#.NET : Scraping dynamic (JS) websites,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911100/

相关文章:

c# - C#:Thread.Sleep无法正常工作

c# - 如何从模型中的 IList<model> 获取 Id?

c# - .NET 可移植类库和 UDP 支持

.net - 如何将输入发送到控制台,就像用户正在打字一样?

javascript - 有/没有 Selenium 运行 Protractor 的区别?

c# - 如何处理 String.Format 方法?

c# - 如何在单元测试中从我的 MVC 框架中获取 Session.SessionID?

c# - 如何提高 'ManagementEventWatcher'逻辑的响应能力?

python - 无法使用 selenium 和 python 从源拖放到目标

c# - Selenium 2 - 将焦点切换到没有名称/ID 的框架