使用ajax / javascript / proxy和多线程支持的无头浏览器或浏览器控件?

时间:2012-09-23 18:05:06

标签: c# multithreading .net-4.0 webbrowser-control headless-browser

我在这里查看了很多消息,但我还没有找到一个浏览器控件或无头浏览器,它允许我为每个线程多线程和配置代理以及支持ajax / javascripts。

我试过很远:

  • awesomium - 如果我为我需要运行的每个线程创建一个单独的应用程序来生成但不是我正在寻找的东西,那么效果很好。
  • simplebrowser - 运行良好,但js / ajax操作太弱而无法考虑
  • nhtmlunit - 工作太复杂了,无法在c#上运行并且运行良好
  • watin - 无法实例化私人会话,并且每个实例都无法使用代理

我也尝试了其他人,但这些是我记得测试的主要内容。

如果awesomium能够进行多线程,这将是一个很棒的但我听说他们只会在进一步的发布中这样做,这是迄今为止最好的。

有人可以推荐我进行其他测试,或者能够做上述问题吗?

我的主要目标是在本地网络网站上自动化测试。

更新

如果我错了,请纠正我,但与watin不同,selenium webdriver(将尝试在少数几个中测试)似乎需要一个远离应用程序本身的远程服务器来控制浏览器,仍在寻找替代方案。

UPDATE2:

已经能够使用chromedriver + Selenium和c#进行多线程,但是在产生多个cromiumdrivers +浏览器的基础上,它只使用了几个线程的难以理解的内存:

开火多线程:

_tasks = new List<Task>();
foreach (ProxyList item in _proxy)
{
            // using it directly it doesnt get passed down to the function
    string proxy = item.Proxy;
    string host = item.Host;
    _tasks.Add(Task.Factory.StartNew(() =>
    {
        ChromeGetIp(proxy, host);
    }));
}

private void ChromeGetIp(string proxy, string host)
{
    string dir = Application.StartupPath + "\\" + host;
    ChromeOptions profile = new ChromeOptions();
    profile.AddArguments(new string[] { "-proxy-server=" + proxy, "-incognito", "--new-window", "-user-data-dir=" + dir });
    IWebDriver driver = new ChromeDriver(profile);
    driver.Navigate().GoToUrl("http://checkip.dyndns.com/");
    if (driver.PageSource.Contains("Current IP Address"))
        MessageBox.Show(driver.FindElement(By.TagName("body")).Text, host);
    else
        MessageBox.Show("Failed", host);
    driver.Quit();
}

是否有其他方法可以让这款打火机值得用于多个线程?

3 个答案:

答案 0 :(得分:1)

我正在寻找类似的解决方案,使用无头HttpWebRequest找到驾驶自动化,对于JS的任何事情来说都是不可能的。即,99%的互联网。

无论如何 - Selenium不需要服务器,除非你想远程做事。如果你想在同一台机器上编写一些C#来驱动你的浏览器,那么你最好选择Selenium。

在这里解释一下: http://seleniumhq.org/docs/03_webdriver.html

编辑:不得不编辑这个答案,因为我无法评论(当我回答时没有登录)。

如果您想进行无头浏览 - 或者至少在浏览器不可见的情况下,您可以将其设置为服务。这将作为系统执行,您将无法看到浏览器。它会让内存变得很重,但除非你一次运行100个浏览器,否则任何现代计算机都没有问题。并且一定要在必要时/当服务结束时退出()浏览器。

至于代理 - 您无法使用IE进行设置,但Firefox会将其与功能一起使用,这正是我所做的。

答案 1 :(得分:0)

有理由拒绝通常的Selenium / Firefox组合吗?

答案 2 :(得分:0)

到目前为止,我发现最好的解决方案是使用awesomium,当使用无头时它使用非常少的内存,允许我产生大量进程,与硒和其他解决方案相比,并且对AJAX有很好的支持, JavaScript,代理等。

暂时我会留下自己的答案,但如果有人发布符合我要求的更好选项,我会更改。