c#无头浏览器,支持crawler的javascript

时间:2013-03-06 18:10:33

标签: c# .net webclient headless-browser

有人可以建议支持cookie和自动执行javascript的.NET无头浏览器吗?

2 个答案:

答案 0 :(得分:9)

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

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

Firefox的Selenium docs代码段,但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主机上运行。

答案 1 :(得分:4)

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

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