我在这里查看了很多消息,但还没有找到一个浏览器控件或无头浏览器,它允许我多线程和配置每个线程的代理以及支持 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();
}
使这个更轻的其他方法值得用于多个线程吗?