Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#硒或WebBrowser替代品模拟人类_C#_.net_Selenium Webdriver - Fatal编程技术网

C#硒或WebBrowser替代品模拟人类

C#硒或WebBrowser替代品模拟人类,c#,.net,selenium-webdriver,C#,.net,Selenium Webdriver,大家好,我不久前使用Selenium创建了一个程序,在我喜欢使用的网站上执行自动操作 我成功地使用Selenium做了我以前想做的事情,没有太多麻烦。我唯一的问题是在后台使用它 我不能在不影响我在PC上做的其他事情的情况下使用它,我确实想过使用虚拟机,但我想尝试避免这种情况 昨晚我在C#中玩WebBrowser类,它很好,但是很有限,我喜欢它在windows窗体应用程序中是如何独立的,所以这就是我要找的 是否有人知道在windows窗体应用程序中集成浏览器视觉表示的最佳方法,但仍允许我模拟按键输

大家好,我不久前使用Selenium创建了一个程序,在我喜欢使用的网站上执行自动操作

我成功地使用Selenium做了我以前想做的事情,没有太多麻烦。我唯一的问题是在后台使用它

我不能在不影响我在PC上做的其他事情的情况下使用它,我确实想过使用虚拟机,但我想尝试避免这种情况

昨晚我在C#中玩WebBrowser类,它很好,但是很有限,我喜欢它在windows窗体应用程序中是如何独立的,所以这就是我要找的

是否有人知道在windows窗体应用程序中集成浏览器视觉表示的最佳方法,但仍允许我模拟按键输入等,但会在后台运行


我听说过WaitN、GekoFX、MozNet等东西,但从我所读到的资料来看,我不确定这些东西有没有用

应用程序是否需要托管在窗口中

我曾使用selenium、Watin实现自动化,不幸的是,它们确实干扰了您的工作,我还没有找到解决方法

我也使用了.Net
WebBrowser
类,但是为了实现自动化,如果不测试它是否是一个功能齐全的IE,就其内部运行的JavaScript而言,我不确定它是否是一个。我认为它确实执行Java脚本,但您需要检查

如果您不需要查看正在发生的事情,也可以使用无头选项,即使对于Selenium,我认为:

以下是无头版本列表,如果您认为可行:


一般来说,当您尝试使用浏览器自动生成网页时,有两个选项可用于模拟用户事件。您可以通过JavaScript来模拟它们,也可以使用操作系统级机制(所谓的“本机事件”)来模拟鼠标和键盘事件。这两种方法都有其缺陷

仅使用JavaScript的模拟事件可能会允许正在自动运行的窗口在执行所需任务时保持在后台,而无需系统焦点。Selenium RC使用这种方法,Selenium WebDriver提供了为Firefox和IE使用模拟事件的能力。但是,这种方法存在一些缺点。模拟事件可能缺乏所需的逼真度和准确性。例如,通过CSS
:hover
伪选择器工作的页面上的“下拉菜单”无法通过JavaScript触发,因此这种方法在这些情况下注定会失败。此外,由于您使用的是JavaScript,因此只能使用JavaScript沙箱,这意味着跨域框架等可能严格禁止使用

另一方面,本机事件更能代表用户的实际鼠标和键盘操作。一般来说,它们将允许在网页上以正确的顺序触发正确的事件,而无需猜测在哪些元素上触发哪些事件。使用它们的缺点是,要正确地实现它们,被自动化的窗口必须具有系统焦点才能正确地接收事件。如果您在Windows上,您可以尝试使用
SendMessage
API绕过此问题,但这是最常见的,因为它容易出错,而且绝对不能保证正常工作。使用本机事件的正确方法是使用API,但该API将输入发送到具有系统焦点的窗口。WebDriver默认使用本机事件模拟用户输入,但默认使用有缺陷的
SendMessage
方法。至少对于IE来说,它确实提供了一个选项,可以使用更正确的
SendInput
方法


如果你执意不需要在前台设置浏览器窗口,你真的应该考虑无头选项。是一个很好的选择,WebDriver也有一个驱动程序,这意味着您仍然可以用C#编写自动化代码。否则,您只能使用上述其他方法之一。

我更喜欢某种视觉表现,我认为WebBrowser类功能不全,因为我在设置自动登录网站时遇到了很多问题,而selenium没有问题,我认为在登录时有JavaScript保护,这会把WebBrowser搞砸。我们的目标是尝试为这个完全独立的应用程序。只是再次看,我昨晚注意到它,但认为它是C++,我只会看到我是否可以找到一些C例子,然后跳入它。你是在一个测试箱和一个开发箱上运行这个吗?不是,我只是在我的PC上运行这个,到我喜欢的网站的实时版本,我是在VS 2012中开发的。这只是一个家庭项目。WebBrowser限制了很多可用的javascript功能。这是最糟糕的选择。
WatiN
对我来说太棒了!我看了一下WaitN,最近发布的版本是很久以前的,它还在开发中吗?我刚刚又看了一遍awesomium,它看起来应该可以用了,今晚我会试试。感谢你对这两个不同选项的解释,我想我将使用Javascript方法进行交互,因为我为之编写的网站将使用这条路线。