3

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

我试过很远:

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

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

如果 awesomium 能够做多线程,那将是很棒的,但我听说他们只会在以后的版本中这样做,这是迄今为止最好的。

任何人都可以推荐我其他人进行测试或能够完成上述要求吗?

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

更新:

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

更新2:

已经能够使用 chromiumdriver + 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();
}

使这个更轻的其他方法值得用于多个线程吗?

4

3 回答 3

1

我正在寻找一个类似的解决方案,使用无头 HttpWebRequest 找到驱动自动化对于任何使用 JS 的东西来说几乎是不可能的。即,99% 的互联网。

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

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

编辑:必须编辑这个答案,因为我无法发表评论(我回答时没有登录)。

如果您想进行无头浏览 - 或者至少在浏览器不可见的情况下,您可以将其设置为服务。这将作为系统执行,您将看不到浏览器。它确实会占用大量内存,但除非您要同时运行 100 个浏览器,否则对于任何现代计算机来说都不是问题。并确保在必要时/服务结束时退出()浏览器。

至于代理 - 你不能用 IE 来设置它,但是 Firefox 会用 Capabilities 来接受它,这就是我正在做的。

于 2012-09-25T11:27:00.023 回答
0

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

于 2012-09-23T18:08:56.837 回答
0

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

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

于 2012-09-30T06:44:37.013 回答