C# 怎么让IE浏览器运行js脚本 Internet ExplorerC#JavaScript 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc2.parentWindow;//拿到html对象win.execScript("changeRegImg()", "javascript");//调用JS用Microsoft.mshtml.dll可以再c#程序里操作IE。 感谢楼上的.再补充一下.实际操作的时候.doc2.parentWindow这句会报异常InvalidCastExceptionSpecified cast is not valid. 你要确定你的doc2是什么对象,是不是IHTMLDocument2还有就是看看你取得的doc2是不是ie的,其他浏览器的文档对象会报错,文档对象 doc对象是{mshtml.HTMLDocumentClass} 应该是:mshtml.IHTMLDocument2 iHTMLDocument2 = GetIHTMLDocument2ByUrl(payUrl);不是HTMLDocumentClass 可是你跟我说你要alert() alert();只是一段javascript脚本的示例而已.实际运行的可能是document.getelementbyid('XXXX').value="XXXXXXXX"; 你自己不是用的WebBrowser组件? 还不用webbrowser 回12楼我没有用WebBrowser啊. 哥们,你还是不了解mshtml这个dll~~~这个完全可以直接操控整个页面,包括任何标签,你为毛还要通过调用js的形式来改value啊 哈哈,15楼兄弟比较有想象力!我只是想写个帐户自动登录的软件.如果用mshtml这个dll自带的功能确实可以实现我需要的功能,可是自由度不高.每个网站登录方式都是不同的.有些是用户名+密码有些还有其他内容.所以我打算只让软件起到保存信息,输出信息的功能,具体的登录功能放到配置中去,由js完成.这样可定制性不是很高吗? 既然是账户自动登录 那你为何要用这么复杂的用mshtml或webbrowser这些去实现呢?你使用System.Net下的HttpWebRequest,HttpWebResponse这些去模拟登录比你用js脚本登录靠谱很多吧 你还是描述的不是那么清楚 如果是你自己软件里要帮用户自动登录账户 然后获取信息显示在软件里可以用我上面的方案如果你只是想帮用户打开浏览器,然后帮用户自动登录可以参考下下面这片文章http://blog.csdn.net/zhangaijiang/article/details/6039719 我的目标很简单,1,让浏览器打开网址2,让浏览器运行指定的javascript脚本现在的问题是卡在2上面了. 哥们,那也得看看我的需求是什么吧?我登录了网页后呢?总要让人来操作网页吧?你通过httprequest登录了,我怎么把登录结果转移到IE上面去呀? 那你用sesion做判断,在数据库中做限制,登陆之后在用户的state中设置一个值,这里需要注意,你要定时去把登陆状态更新下,,,, 嘿嘿,我自己搞定了,不过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);}} HTMLBodyClass body = doc2.body as HTMLBodyClass; 我运行 得到的是 null 啊 从数据库里查出来的人名,怎么按表格的形式排列 label控件的属性调用 等Dobzhansky大哥 的回帖。。关于用mshtml的问题 添加记录时一个奇怪的问题 小弟求哥哥姐姐们帮忙指点下!~~ 请教C#创建XML问题 如何对比两个图片? C#访问SQL数据库的问题 0,1值如何在DataGrid中用DataGridBoolColumn?? 怎样从控制台输出聊天记录 如何在使用DLL文件后,通过程序卸载使用的DLL文件? 未处理的TypeInitializationException,类型初始值设定项引发异常该如何解决
win.execScript("changeRegImg()", "javascript");//调用JS用Microsoft.mshtml.dll可以再c#程序里操作IE。
doc2.parentWindow
这句会报异常InvalidCastException
Specified cast is not valid.
还有就是看看你取得的doc2是不是ie的,其他浏览器的文档对象会报错,文档对象
应该是:mshtml.IHTMLDocument2 iHTMLDocument2 = GetIHTMLDocument2ByUrl(payUrl);不是HTMLDocumentClass
可是你跟我说你要alert()
实际运行的可能是document.getelementbyid('XXXX').value="XXXXXXXX";
我没有用WebBrowser啊.
每个网站登录方式都是不同的.
有些是用户名+密码
有些还有其他内容.
所以我打算只让软件起到保存信息,输出信息的功能,具体的登录功能放到配置中去,由js完成.
这样可定制性不是很高吗?
你使用System.Net下的HttpWebRequest,HttpWebResponse这些去模拟登录比你用js脚本登录靠谱很多吧
如果你只是想帮用户打开浏览器,然后帮用户自动登录可以参考下下面这片文章
http://blog.csdn.net/zhangaijiang/article/details/6039719
1,让浏览器打开网址
2,让浏览器运行指定的javascript脚本现在的问题是卡在2上面了.
哥们,那也得看看我的需求是什么吧?
我登录了网页后呢?总要让人来操作网页吧?
你通过httprequest登录了,我怎么把登录结果转移到IE上面去呀?
谁能给我一下解释吗?下面这段代码是可以成功运行的,也是完全满足要求的.
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);
}
}