任何人都可以建议支持 cookie 和自动执行 javascript 的 .NET 无头浏览器吗?
2 回答
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 主机上运行.
我不知道基于 .NET 的无头浏览器,但总是有PhantomJS,它是 C/C++,它在帮助使用 QUnit 对 JS 进行单元测试时效果很好。
这里还有另一个可能对您有所帮助的相关问题 - Headless browser for C# (.NET)?