当前位置: 代码迷 >> 综合 >> WebBrowse, Invoke javascript, C# API, outer html
  详细解决方案

WebBrowse, Invoke javascript, C# API, outer html

热度:82   发布时间:2024-01-10 11:27:17.0

用webbrowser控件navigate到某个页面。

可以使用webbrowser.document.invoke来调用document里的javascript。

我的目的是要把页面保存下来,我一开始用的是document.execcommand方法。这个函数接受很多参数,对应浏览器的各个菜单命令,如另存为,打印等等。
这些命令参数的英文名是command identifier,具体的参数列表,在下面这个页面有详细介绍。我顺便把它们附在最后。
(http://www.tutor.nsu.ru/library/default.asp?url=/workshop/author/dhtml/reference/commandids.asp)
我用execcommand("saveas",true,path)进行保存。
文档上对saveas的介绍是:其第2个参数是个布尔值,设为真时会显示另存为对话框,设为false时不显示对话框。
但是实际上,无论设为真或假,都会显示对话框。对于这一点,有另一篇文章说是为了防止大批量拷贝网页,阻止盗取他人的数据。
呵呵,挺滑稽的。难道这个小小的参数能担负起这么重大的责任?

既然这个窗口一定会出现,那怎么解决它呢。我想可以用程序来模拟人的点击动作。具体是这么做的。通过对话框标题查找保存对话框,当然也可以用其他特征去查找,
找到对话框之后,再定位对话框中的保存按钮,这两个查找都可以用FindWindow来做。找到后给这个对话框发个消息就可以了,用SendMessage,消息则用WM_CLICK。
因为我用的是c#,而FindWindow,SendMessage并不是托管代码,那如何在c#中使用它们呢?
下面这篇文章介绍了这方面的知识。
用C#调用Windows API和其它进程通信 (http://www.cnblogs.com/index/archive/2005/01/16/92651.html)
关键就是要引入这些非托管代码,用下面的语句就可以了。
    #region Dll Import
 
    [DllImport("User32.dll",EntryPoint="FindWindow")]
    private static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
 
    [DllImport("user32.dll",EntryPoint="FindWindowEx")]
    private static extern IntPtr FindWindowEx(IntPtr hwndParent,
IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
 
    [DllImport("User32.dll",EntryPoint="SendMessage")]
    private static extern int Sen

  相关解决方案