我在这里查看了很多消息,但我还没有找到一个浏览器控件或无头浏览器,它允许我为每个线程多线程和配置代理以及支持ajax / javascripts。
我试过很远:
我也尝试了其他人,但这些是我记得测试的主要内容。
如果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();
}
是否有其他方法可以让这款打火机值得用于多个线程?
答案 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,代理等。
暂时我会留下自己的答案,但如果有人发布符合我要求的更好选项,我会更改。