【问题标题】:c# headless browser with javascript support for crawlerc# 无头浏览器,带有对爬虫的 javascript 支持
【发布时间】:2013-02-21 16:26:15
【问题描述】:

任何人都可以推荐支持 cookie 和自动执行 javascript 的 .NET 无头浏览器吗?

【问题讨论】:

  • 你的意思是WebBrowser control
  • WebClient runs javascript的可能重复
  • 你打算如何使用它?
  • 对不起,我的问题太差了。它是一个网站的控制台爬虫应用程序。问题是目标网站使用大量 javascript 生成的 cookie 和大量 javascript“在文档就绪重定向上”,因此几乎不可能在接下来自动重新创建带有 cookie 的会话(例如从指定的 url 获取 cookie 并继续)时间。所以我想为一些无头浏览器留下这些“cookie生成/保存”和重定向序列(我不需要渲染html内容,只需使用htmlagilitypack处理它)。

标签: c# .net webclient headless-browser


【解决方案1】:

Selenium+HtmlUnitDriver/GhostDriver 正是您要找的。过于简化,Selenium 是使用各种浏览器实现自动化目的的库 - 测试、抓取、任务自动化。

您可以使用不同的 WebDriver 类来操作实际的浏览器。 HtmlUnitDriver 是无头的。 GhostDriver 是 PhantomJS 的 WebDriver,因此您可以编写 C#,而实际上 PhantomJS 会完成繁重的工作。

来自 Selenium docs 的代码 sn-p 用于 Firefox,但带有 GhostDriver (PhantomJS) 或 HtmlUnitDriver 的代码几乎相同。

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;

class GoogleSuggest
{
    static void Main(string[] args)
    {
        // driver initialization varies across different drivers
        // but they all support parameter-less constructors
        IWebDriver driver = new FirefoxDriver();
        driver.Navigate().GoToUrl("http://www.google.com/");


        IWebElement query = driver.FindElement(By.Name("q"));
        query.SendKeys("Cheese");
        query.Submit();

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        wait.Until((d) => { return d.Title.ToLower().StartsWith("cheese"); });

        System.Console.WriteLine("Page title is: " + driver.Title);

        driver.Quit();
    }
}

如果您在 Windows 机器上运行它,您可以使用实际的 Firefox/Chrome 驱动程序,因为它将打开一个实际的浏览器窗口,该窗口将按照您在 C# 中编程的方式运行。 HtmlUnitDriver 是最轻量和最快速的。

我已使用Mono 在 Linux 上成功运行 Selenium for C# (FirefoxDriver)。我想 HtmlUnitDriver 也可以像其他人一样工作,所以如果你需要速度 - 我建议你选择 Mono(你可以在 Windows 上使用 Visual Studio 开发、测试和编译,没问题)+ Selenium HtmlUnitDriver 在没有桌面的 Linux 主机上运行.

【讨论】:

    【解决方案2】:

    我不知道基于 .NET 的无头浏览器,但总是有 PhantomJS,它是 C/C++,它可以很好地协助使用 QUnit 对 JS 进行单元测试。

    这里还有另一个相关问题可能对您有所帮助 - Headless browser for C# (.NET)?

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多