首页 > 其他 > 详细

操作 Frame

时间:2014-02-26 04:20:27      阅读:363      评论:0      收藏:0      [点我收藏+]
操作 Frame


如果登录控件就在正常的页面上,下面的程序就可完成登录的自动化。


    let ie = new SHDocVw.InternetExplorerClass()
    let username = "XXXX"
    let password = "XXXX"


    let url = "http://site.site"
    ie.Navigate( url )
    WaitForLoad ie
    ie.Visible <- true
    let doc = ie.Document :?> mshtml.HTMLDocumentClass
    
    doc.getElementById("u").setAttribute("value", username)
    doc.getElementById("p").setAttribute("value", password)
    doc.getElementById("login_button").click()


但是,如果登录控件是放在 Frame 中的,从 doc 中就无法访问了。
照常理,添加下面的代码后,doc2 中应该是 Frame,这样,是可以访问 Frame 的。
但是,不幸的是,doc2 与 doc 居然完全相同,因此,也就无法访问登录了。


    let iframe = doc.getElementsByTagName("iframe").item(0) :?> mshtml.HTMLIFrameClass
    let doc2 = iframe.document :?> mshtml.HTMLDocumentClass


需要添加下面的代码,才能访问 Frame 中的控件。


    let i = box 0
    let doc3 = doc.frames.item(ref i) :?> mshtml.HTMLWindow2Class
    let doc = doc3.document :?> mshtml.HTMLDocumentClass


这里,比较怪的是,item 中不能直接赋 0 。


还有一点需要注意,在单步运行时是完全可以的,而一旦编译后,再运行,就会出错,说:
函数求值需要运行所有线程。


需要在主程序中加上
[<STAThread>]

操作 Frame

原文:http://blog.csdn.net/hadstj/article/details/19914653

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!