9

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

4

2 回答 2

9

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

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

来自 Firefox 的Selenium 文档的代码片段,但使用 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 主机上运行.

于 2015-02-15T14:13:27.543 回答
4

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

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

于 2013-03-06T18:19:53.583 回答