Witam.
W jaki sposób można wywołać kliknięcie na Element w WebBrowserze?
Ani
InvokeMember("click")
ani
InvokeMember("onclick")
nie przynoszą efektu...
co mogę jeszcze zastosować?
Witam.
W jaki sposób można wywołać kliknięcie na Element w WebBrowserze?
Ani
InvokeMember("click")
ani
InvokeMember("onclick")
nie przynoszą efektu...
co mogę jeszcze zastosować?
Co to za element i jaki efekt ma wywołać to kliknięcie?
Jest to button, wywołujący funkcję w JS...
podejrzewam że problem leży po stronie JS, gdyż WebBrowser nie obsługuje niektórych JS....
dałem taki kod by to poprawić, lecz nawet jak ręcznie klikam na ten button, to on nie reaguje...
#Region "IE Fix"
Private Shared Sub SetBrowserFeatureControlKey(feature As String, appName As String, value As UInteger)
If Environment.Is64BitOperatingSystem Then
Using key = Registry.LocalMachine.CreateSubKey([String].Concat("Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree)
key.SetValue(appName, CType(value, UInt32), RegistryValueKind.DWord)
End Using
End If
Using key = Registry.CurrentUser.CreateSubKey([String].Concat("Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree)
key.SetValue(appName, CType(value, UInt32), RegistryValueKind.DWord)
End Using
End Sub
Private Sub SetBrowserFeatureControl()
' http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx
' FeatureControl settings are per-process
Dim fileName = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName)
' make the control is not running inside Visual Studio Designer
If [String].Compare(fileName, "devenv.exe", True) = 0 OrElse [String].Compare(fileName, "XDesProc.exe", True) = 0 Then
Return
End If
SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode())
' Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
SetBrowserFeatureControlKey("FEATURE_AJAX_CONNECTIONEVENTS", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_MANAGE_SCRIPT_CIRCULAR_REFS", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_DOMSTORAGE ", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_GPU_RENDERING ", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI ", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_DISABLE_LEGACY_COMPRESSION", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_LOCALMACHINE_LOCKDOWN", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_OBJECT", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_BLOCK_LMZ_SCRIPT", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_DISABLE_NAVIGATION_SOUNDS", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_SCRIPTURL_MITIGATION", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_SPELLCHECKING", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_STATUS_BAR_THROTTLING", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_TABBED_BROWSING", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_VALIDATE_NAVIGATE_URL", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_WEBOC_DOCUMENT_ZOOM", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_WEBOC_POPUPMANAGEMENT", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_WEBOC_MOVESIZECHILD", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_ADDON_MANAGEMENT", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_WEBSOCKET", fileName, 1)
SetBrowserFeatureControlKey("FEATURE_WINDOW_RESTRICTIONS ", fileName, 0)
SetBrowserFeatureControlKey("FEATURE_XMLHTTP", fileName, 1)
End Sub
Private Function GetBrowserEmulationMode() As UInt32
Dim browserVersion As Integer = 7
Using ieKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer", RegistryKeyPermissionCheck.ReadSubTree, System.Security.AccessControl.RegistryRights.QueryValues)
Dim version = ieKey.GetValue("svcVersion")
If Nothing = version Then
version = ieKey.GetValue("Version")
If Nothing = version Then
Throw New ApplicationException("Microsoft Internet Explorer is required!")
End If
End If
Integer.TryParse(version.ToString().Split("."c)(0), browserVersion)
End Using
Dim mode As UInt32 = 10000
' Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
Select Case browserVersion
Case 7
mode = 7000
' Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
Exit Select
Case 8
mode = 8000
' Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8
Exit Select
Case 9
mode = 9000
' Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
Exit Select
Case 10
mode = 10000
' Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
Exit Select
Case 11
mode = 11001
' Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
Exit Select
Case Else
' use IE10 mode by default
Exit Select
End Select
Return mode
End Function
#End Region
a jeśli chodzi o to jak wywołuje samo kliknięcie to:
Dim Copy_Form As HtmlElement = WebBrowser1.Document.GetElementById("copyFilesModal")
If Copy_Form.GetAttribute("aria-hidden").ToLower = "false" Then
For Each hi As HtmlElement In Copy_Form.GetElementsByTagName("button")
If Not Object.ReferenceEquals(hi.GetAttribute("className"), Nothing) AndAlso hi.GetAttribute("className").Equals("btn btn-primary") And hi.OuterText.ToLower.Contains("skopiuj") Then
hi.InvokeMember("click")
Exit For
End If
Next
End If
Skoro klikając ręcznie na ten przycisk nie ma reakcji to programowo tez nie będzie - to logiczne. WebBrowser nie zawsze zachowuje się jak dokładnie systemowa przeglądarka IE dlatego trzeba zmienić w rejestrze wartość FEATURE_BROWSER_EMULATION
ale to widzę masz zrobione tyle że tak że powinno emulować wersję IE taką jaką masz w systemie próbowałeś na sztywno "wymuszać" jakąś inną wersję? Sprawdzałeś czy ten przycisk działa pod normalnym IE (choć raczej powinien bo to widzę nowoczesna strona wykorzystująca a Bootstrap i jQuery są uniwersalne).
Rozumiesz w ogóle ten kod? W tej linii
SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", fileName, GetBrowserEmulationMode())
wywołanie funkcji GetBrowserEmulationMode()
zmieniasz na jedną z tych wartości co masz w case na 10000
dla IE 10, 11001
dla IE 11.
Tak dla pewności zapytam wywołujesz w ogóle procedurę SetBrowserFeatureControl
.