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

Bog*_*nik 8 .net c# webclient headless-browser

任何人都可以建议支持cookie和authomatically javascript执行的无头浏览器吗?

小智 9

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

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

来自Selenium docs for 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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


小智 4

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

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