0

I have a web browser that navigates to this url: https://www.tinglysning.dk/m/#/soeg

I want to automate a search on that by automatically entering text into the textbox then hit the "Søg" button. I do that with this:

        webBrowser1.Document.GetElementById("adresse").InnerText = "hobrovej 35 9000";
        webBrowser1.Document.GetElementById("btn-soeg").InvokeMember("Click");

All that is working fine, the problem is that when the button is clicked, it only shows a loading box and not the actual results

Thanks in advance

Taco2
  • 429
  • 1
  • 6
  • 18

1 Answers1

0

The problem is, that the WebBrowser control has many security restrictions, which prevents the correct execution if single page applications (SPAs) (like the use of AJAX). https://www.tinglysning.dk/m/#/soeg seems to be an Angular application.

I assume you develop a WindowsFormsApplication (because the WPF WebBrowser does not have the GetElementById functions). I found a working solution, taken of the answer in this post: https://stackoverflow.com/a/18333982/1681616

The code snipped below disables those security restrictions and allows the Angular application to work properly. Just make sure to call SetBrowserFeatureControl before initializing the WebBrowser control. E.g. call this method before the forms InitializeComponent

private void SetBrowserFeatureControl()
{
    // http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx

    // FeatureControl settings are per-process
    var fileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);

    // make the control is not running inside Visual Studio Designer
    if (string.Compare(fileName, "devenv.exe", true) == 0
        || string.Compare(fileName, "XDesProc.exe", true) == 0)
        return;

    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);
}

private void SetBrowserFeatureControlKey(string feature,
                                            string appName,
                                            uint value)
{
    using (var key = Registry.CurrentUser.CreateSubKey(
                                                        string.Concat(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature),
                                                        RegistryKeyPermissionCheck.ReadWriteSubTree))
    {
        key.SetValue(appName, (uint) value, RegistryValueKind.DWord);
    }
}

private uint GetBrowserEmulationMode()
{
    var browserVersion = 7;
    using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer",
                                                        RegistryKeyPermissionCheck.ReadSubTree,
                                                        RegistryRights.QueryValues))
    {
        var version = ieKey.GetValue("svcVersion");
        if (null == version)
        {
            version = ieKey.GetValue("Version");
            if (null == version)
                throw new ApplicationException("Microsoft Internet Explorer is required!");
        }

        int.TryParse(version.ToString().Split('.')[0], out browserVersion);
    }

    uint
        mode = 11000; // Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 Standards mode. Default value for Internet Explorer 11.
    switch (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.
            break;
        case 8:
            mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8
            break;
        case 9:
            mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
            break;
        case 10:
            mode = 10000; // Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 mode. Default value for Internet Explorer 10.
            break;
        default:
            // use IE11 mode by default
            break;
    }

    return mode;
}
Iqon
  • 1,920
  • 12
  • 20