像Chrome一样,是否有可靠的方法将JavaScript注入WebBrowser元素?

时间:2019-07-02 10:51:04

标签: javascript c#

我正在尝试模拟Windows窗体中Visual Studio随附的 webbrowser控件中的拖放。问题似乎是,我在网络浏览器中注入的javascript代码似乎并非总是能够按预期工作,就像通过chrome控制台甚至是IE控制台键入时一样。

似乎是一个问题,源于我尝试在其上进行操作的网站的工作方式。我已经通过chrome控制台在该网站上尝试了我的javascript代码,并且它按预期方式工作,但通过我的inject方法进行注入时却无法正常工作,至少并非总是如此。

这是我用来在浏览器中注入javascript的代码:

        private void InjectJS(string js)
        {
            HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
            HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
            IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
            element.text = "function inject() {"+js+"}";
            head.AppendChild(scriptEl);
            currentDocument.InvokeScript("inject");

        }

这是我要注入的代码:

function downfa(t){["mouseover","mousedown","mouseup","click"].forEach(function(e){!function(e,t){var n=document.createEvent("MouseEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}(t,e)})}
downfa(loginsubmit);
//Note: This is some code to click an element. element.click() is not what I want to do.

chromewebbrowser(其中“测试”按钮只是在下面调用代码)上的duckduckgo(单击鸭子)上都可以正常工作

InjectJS(File.ReadAllText("SimpleCode.txt"));

但是,在其他网站上,它可以按预期在chrome上运行,但在webbrowser上却没有任何作用

为我的应用启用脚本调试后,我发现未定义“ loginsubmit”,即使很明显是在使用chrome时。

总而言之,我期望我可以在每个网站上的每个元素上使用“点击代码”,并且通过开发者控制台在chrome或IE这样的浏览器中也可以使用,但是有时仅是在C#的Windows窗体Web浏览器中。

与浏览器动态运行javascript相比,我的注入代码是否有所不同?

0 个答案:

没有答案