C# 怎么让IE浏览器运行js脚本

shaoming01 2013-06-19 05:41:33
现在有IE浏览器进程,已经打开某网站,
希望通过C# 让此IE窗口执行某脚本,如<script>alert();</script>

1,不写IE插件
2,不借助第三方浏览器,只针对IE
3,不使用Winform的WebBrowser控件.

知道的朋友给个思路


补充说明:
我使用下面这段代码试了,'aaaaaaaaa'会在页面中显示出来,但是后面那段js脚本却没有运行.很奇怪.
ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
foreach (InternetExplorer Browser in m_IEFoundBrowsers)
{
if (Browser.Document is HTMLDocumentClass)
{
HTMLDocument doc = Browser.Document as HTMLDocumentClass;
doc.body.innerHTML += "aaaaaaaaa<script type=\"text/javascript\">alert(11);</script>";
}
}
...全文
777 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
juxiong1 2014-12-10
  • 打赏
  • 举报
回复
HTMLBodyClass body = doc2.body as HTMLBodyClass; 我运行 得到的是 null 啊
江湖评谈 2013-06-22
  • 打赏
  • 举报
回复
引用 27 楼 shaoming01 的回复:
引用 27 楼 shaoming01 的回复:
嘿嘿,我自己搞定了,不过COM这东西真烦人,接口之间没有继承关系,无法匿名转换,但是强转却也能转换, 谁能给我一下解释吗? 下面这段代码是可以成功运行的,也是完全满足要求的. ShellWindows m_IEFoundBrowsers = new ShellWindowsClass(); foreach (InternetExplorer Browser in m_IEFoundBrowsers) { if (Browser.Document is HTMLDocumentClass) { HTMLDocumentClass doc2 = Browser.Document as HTMLDocumentClass; HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script"); script.text = "alert('a');"; HTMLBodyClass body = doc2.body as HTMLBodyClass; body.appendChild((IHTMLDOMNode)script); } }
------------- COM是有继承的,至于匿名么貌似没有 ShellWindows m_IEFoundBrowsers = new ShellWindowsClass(); ---------------- ShellWindows 继承了IShellWindows, DShellWindowsEvents_Event这两个接口.包含了公共枚举IEnumerable,和两个事件方法。主要返回回windows窗口数目 foreach (InternetExplorer Browser in m_IEFoundBrowsers) //遍历当前IE实例 { if (Browser.Document is HTMLDocumentClass) { HTMLDocumentClass这个继承了大约十二到十一个接口和一堆的方法。主要是用来增强HTMLDocument这个mS 接口。 HTMLDocumentClass doc2 = Browser.Document as HTMLDocumentClass; HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script"); //HTMLScriptElement ,ms接口 。下面三句是添加一个Element元素到BODY里面(DOM树) script.text = "alert('a');"; HTMLBodyClass body = doc2.body as HTMLBodyClass; body.appendChild((IHTMLDOMNode)script); } }
shaoming01 2013-06-20
  • 打赏
  • 举报
回复
嘿嘿,我自己搞定了,不过COM这东西真烦人,接口之间没有继承关系,无法匿名转换,但是强转却也能转换, 谁能给我一下解释吗? 下面这段代码是可以成功运行的,也是完全满足要求的. ShellWindows m_IEFoundBrowsers = new ShellWindowsClass(); foreach (InternetExplorer Browser in m_IEFoundBrowsers) { if (Browser.Document is HTMLDocumentClass) { HTMLDocumentClass doc2 = Browser.Document as HTMLDocumentClass; HTMLScriptElement script = (HTMLScriptElement)doc2.createElement("script"); script.text = "alert('a');"; HTMLBodyClass body = doc2.body as HTMLBodyClass; body.appendChild((IHTMLDOMNode)script); } }
Teln_小凯 2013-06-20
  • 打赏
  • 举报
回复
过来 学习下。。
coobai 2013-06-20
  • 打赏
  • 举报
回复
alert('11');
OSMeteor 2013-06-20
  • 打赏
  • 举报
回复
那你用sesion做判断,在数据库中做限制,登陆之后在用户的state中设置一个值,这里需要注意,你要定时去把登陆状态更新下,,,,
shaoming01 2013-06-20
  • 打赏
  • 举报
回复
引用 21 楼 kllxyu 的回复:
[quote=引用 17 楼 royzheng 的回复:] 既然是账户自动登录 那你为何要用这么复杂的用mshtml或webbrowser这些去实现呢? 你使用System.Net下的HttpWebRequest,HttpWebResponse这些去模拟登录比你用js脚本登录靠谱很多吧
同意,这种用法。。[/quote] 哥们,那也得看看我的需求是什么吧? 我登录了网页后呢?总要让人来操作网页吧? 你通过httprequest登录了,我怎么把登录结果转移到IE上面去呀?
OSMeteor 2013-06-20
  • 打赏
  • 举报
回复
引用 17 楼 royzheng 的回复:
既然是账户自动登录 那你为何要用这么复杂的用mshtml或webbrowser这些去实现呢? 你使用System.Net下的HttpWebRequest,HttpWebResponse这些去模拟登录比你用js脚本登录靠谱很多吧
同意,这种用法。。
shaoming01 2013-06-20
  • 打赏
  • 举报
回复
我要做什么,我自己很清楚的. 其他的变相实现方式,我都用过的,也是可以实现的,但就现在这个目标来说,还是满足不了的.
shaoming01 2013-06-20
  • 打赏
  • 举报
回复
我的目标很简单, 1,让浏览器打开网址 2,让浏览器运行指定的javascript脚本 现在的问题是卡在2上面了.
u011140852 2013-06-20
  • 打赏
  • 举报
回复
支持啊
royzheng 2013-06-19
  • 打赏
  • 举报
回复
你还是描述的不是那么清楚 如果是你自己软件里要帮用户自动登录账户 然后获取信息显示在软件里可以用我上面的方案 如果你只是想帮用户打开浏览器,然后帮用户自动登录可以参考下下面这片文章 http://blog.csdn.net/zhangaijiang/article/details/6039719
royzheng 2013-06-19
  • 打赏
  • 举报
回复
既然是账户自动登录 那你为何要用这么复杂的用mshtml或webbrowser这些去实现呢? 你使用System.Net下的HttpWebRequest,HttpWebResponse这些去模拟登录比你用js脚本登录靠谱很多吧
shaoming01 2013-06-19
  • 打赏
  • 举报
回复
哈哈,15楼兄弟比较有想象力! 我只是想写个帐户自动登录的软件. 如果用mshtml这个dll自带的功能确实可以实现我需要的功能,可是自由度不高. 每个网站登录方式都是不同的. 有些是用户名+密码 有些还有其他内容. 所以我打算只让软件起到保存信息,输出信息的功能,具体的登录功能放到配置中去,由js完成. 这样可定制性不是很高吗?
royzheng 2013-06-19
  • 打赏
  • 举报
回复
我觉得你应该把你为什么想这么实现说出来 这样说不定人家能给你好的解决方案 我目测是想搞作弊类型的软件?
please_call_me_J 2013-06-19
  • 打赏
  • 举报
回复
哥们,你还是不了解mshtml这个dll~~~这个完全可以直接操控整个页面,包括任何标签,你为毛还要通过调用js的形式来改value啊
shaoming01 2013-06-19
  • 打赏
  • 举报
回复
回12楼 我没有用WebBrowser啊.
江湖评谈 2013-06-19
  • 打赏
  • 举报
回复
你自己不是用的WebBrowser组件? 还不用webbrowser
shaoming01 2013-06-19
  • 打赏
  • 举报
回复
哥们,还有好点子吗?
shaoming01 2013-06-19
  • 打赏
  • 举报
回复
alert();只是一段javascript脚本的示例而已. 实际运行的可能是document.getelementbyid('XXXX').value="XXXXXXXX";
加载更多回复(9)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧