Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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# 互动Win表单和Web浏览器,建议?威尼姆?沃特?白色西库里?_C#_Vb.net_Watin_White Framework - Fatal编程技术网

C# 互动Win表单和Web浏览器,建议?威尼姆?沃特?白色西库里?

C# 互动Win表单和Web浏览器,建议?威尼姆?沃特?白色西库里?,c#,vb.net,watin,white-framework,C#,Vb.net,Watin,White Framework,我想创建一个.NET应用程序,帮助我管理和自动化web浏览器。 我快速搜索了一下,找到了一些解决方案 Selenium似乎是主要的参考软件(开源),但它不允许Windows窗体和浏览器之间的交互 如果我理解正确,基于Selenium的源代码,已经构建了其他允许这样做的软件。 特别是我读过关于维尼姆、瓦丁、怀特和西库利的书 在本页中,我找到了其中一些的简短比较 我想要一些关于使用哪一个的建议 我是VB.NET的一名业余程序员,但我在翻译C#方面没有问题 我想使用Chrome,但关于Watin,我

我想创建一个.NET应用程序,帮助我管理和自动化web浏览器。 我快速搜索了一下,找到了一些解决方案

Selenium似乎是主要的参考软件(开源),但它不允许Windows窗体和浏览器之间的交互

如果我理解正确,基于Selenium的源代码,已经构建了其他允许这样做的软件。 特别是我读过关于维尼姆、瓦丁、怀特和西库利的书

在本页中,我找到了其中一些的简短比较

我想要一些关于使用哪一个的建议

我是VB.NET的一名业余程序员,但我在翻译C#方面没有问题

我想使用Chrome,但关于Watin,我了解到它不支持Chrome,并且支持其他浏览器的旧版本(InternetExplorer9和Firefox2.x)。 您知道这是否会在加载页面时产生问题吗

我还需要一个软件,可以处理加载页面时的延迟

在示例中,对于.NET WebBrowser类,我使用以下指令:

直到wb.ReadyState=WebBrowserReadyState.Complete 或者之前我将WebBrowser类与HtmlAgilityPack混合在一起,在这种模式下:

Do
Application.DoEvents()
'我们创建了一个延迟,允许正确加载页面:
'Thread.Sleep(…)不允许正确加载页面
Dim delay as Date=Date.Now.add毫秒(1000)
延迟>日期。现在开始
环
documentAsIHtmlDocument3=DirectCast(wb.Document.DomDocument,mshtml.IHTMLDocument3)
sr=新的StringReader(DocumentsIhtmlDocument3.documentElement.outerHTML)
docPreview.Load(sr)
nodeTmp1=docPreview.DocumentNode.SelectSingleNode(“//div[@id='content']”)
nodeModule=nodeTmp1.SelectNodes(“后代::div[@class='module']”)
循环直到IsNothing(nodeModule)=False
但是我不喜欢这种类型的解决方案有很多原因,阅读代码,我想你可以想象为什么

你有什么建议吗

2018年1月10日更新:我发现了一条类似的线索:

用户确认使用硒和Watin后感觉良好。 他们提出了一个关于性能缓慢的问题。 其他建议

_________对撤销的答复_________

这是我用Watin编写的一段代码

导入WatiN.Core
...
作为新IE的私有浏览器
...
browser.GoTo(“https://www.the_site_with-wich_i_have_my_account/")
...
私人分帐户()
“通常是一个网站,它是用一个HTML“容器”构建的,其中包含用户名和密码文本框以及一个连接按钮:
'使用chrome右键单击该元素,然后单击'inspect element',我们可以分析HTML代码,并找到容器类的名称
Dim formLogin As WatiN.Core.Form=browser.Form(Find.ByClass(“class\u found\u from\u chrome\u inspect\u元素”))
'搜索用户名文本框
Dim tbUsername As WatiN.Core.TextField=formLogin.TextField(Find.ById(“Username\u TextField\u found\u from\u chrome\u inspect\u element”))
'设置我们的用户名
tbUsername.SetAttributeValue(“值”、“我的用户名”)
'搜索密码文本框
Dim tbPassword As WatiN.Core.TextField=formLogin.TextField(Find.ById(“Password\u TextField\u found\u from\u chrome\u inspect\u element”))
'设置密码
tbPassword.SetAttributeValue(“值”、“我的密码”)
'搜索“加入”按钮并执行单击
formLogin.Button(Find.ById(“Join_Button_found_from_chrome_inspect_元素”))。单击()
端接头

根据我的经验,web浏览器控件远而不多,而且它们似乎很少更新。您当然可以从Windows窗体控制Chrome窗口,尽管将Chrome窗口嵌入Windows窗体可能是另一回事

Selenium Web驱动程序可通过Nuget for.NET()获得,这将允许您创建Chrome会话、导航、拉动元素、单击按钮等,模拟用户在网页上执行的相同操作

此外,WinForms能够通过WebSocket和定制的Chrome扩展与Chrome交互(前面详细介绍) )

编辑:添加示例代码以显示Selenium的工作方式。需要对
Selenium.WebDriver
NuGet软件包进行参考。注意
ImplicitWait
,它可以处理AJAX元素。。。隐式等待是告诉WebDriver在试图查找一个或多个元素(如果它们不立即可用)时轮询DOM一段时间。默认设置为0。设置后,将为WebDriver对象实例()的生命周期设置隐式等待


我在理解这个问题时遇到了一些困难,尽管假设您询问的是如何将桌面应用程序和web应用程序的组合自动化,如下所示:

VisualStudioEnterprise提供的CodedUI允许WPF、Win和Web应用程序的自动化。虽然它不是开源的,但它很好地满足了您的其他需求,并允许在自动化本机桌面应用程序和web浏览器之间无缝过渡。如果你对使用这个感兴趣,我有一系列我创建的个人方法,可以让手工编码测试更容易

然而,我已经从CodedUI转向了白色和硒的结合。
对于WPF应用程序,White比CodedUI快得多,这在测试套件中非常明显。然而,它并不是特别常用,文档也很少。
Selenium非常常用,比CodedUI更快,并且有非常好的文档。我几乎看不到使用其他web自动化平台的理由。

几乎任何涉及循环和
应用程序的解决方案。DoEvents()
都是一个糟糕的解决方案,因此您不喜欢它,只是在做正确的事情。值得一提的是,.NET
WebBrowser
控件有一个名为的事件,每当页面或
出现时都会引发该事件
Public Class Form1
Dim driver As OpenQA.Selenium.Chrome.ChromeDriver
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    'create driver
    Dim driverFolderLocation = "c:\path\to\driver\folder"
    Dim driverService = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService(driverFolderLocation)
    driver = New OpenQA.Selenium.Chrome.ChromeDriver(driverService, New OpenQA.Selenium.Chrome.ChromeOptions())

    'navigate to some url
    driver.Navigate.GoToUrl("http://google.com")

    'example to set implicit timeout for handling ajax elements
    driver.Manage().Timeouts().ImplicitWait = New TimeSpan(0, 0, 10)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'show how we can send keys to an element in the driver
    Dim searchElement As OpenQA.Selenium.IWebElement = driver.FindElement(OpenQA.Selenium.By.Id("lst-ib"))
    searchElement.SendKeys("hello google")
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    'show we can pull data and display or add to a list or whatever
    MessageBox.Show(driver.FindElement(OpenQA.Selenium.By.Id("gb")).Text)
End Sub
End Class