以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于网页中信息的应用问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85994)

--  作者:ap9709130
--  发布时间:2016/6/7 15:44:00
--  关于网页中信息的应用问题
一直想做个自动能从银行网页的查账的功能,现在用foxtable 查到的信息做了一个,但水平有限,请看附件项目。

麻烦老师们指点一下,如果才能把相关关的信息输入到网页中,并去到下页呢?
[此贴子已经被作者于2016/6/10 0:18:29编辑过]

--  作者:Hyphen
--  发布时间:2016/6/7 17:02:00
--  

--  作者:ap9709130
--  发布时间:2016/6/10 0:20:00
--  

已经研究了几天,改进了项目,但是密码怎么也无法输入,请老师帮忙指点一下。多谢!

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动查账.foxdb


--  作者:大红袍
--  发布时间:2016/6/10 10:51:00
--  

银行的数据,不是你想获取就能获取的。密码不能直接输入。最多只能填写用户名

 

e.Form.Controls("WebBrowser1").address= "https://easyabc.95599.cn/SelfBank/netBank/zh_CN/entrance/logonSelf.aspx"
Dim web As System.Windows.Forms.WebBrowser = e.Form.Controls("Webbrowser1").BaseControl

Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("loginWra").GetElementsByTagName("li").count > 0
    Application.DoEvents
Loop
Dim yhm = web.Document.GetElementById("UserBox")
yhm.SetAttribute("Value", "abc")

MessageBox.show("网页打开成功!")


--  作者:ap9709130
--  发布时间:2016/6/10 22:59:00
--  

大红袍老师

 

  这两个值我的例子里也已经可以输入了。就是密码不行。哎,看样子真的不好搞。


--  作者:ap9709130
--  发布时间:2016/6/10 23:04:00
--  
还有一个问题,为什么在Webbrowser1直接手动操作银行的网页也进不去?用IE就没有问题?
--  作者:大红袍
--  发布时间:2016/6/11 0:17:00
--  
以下是引用ap9709130在2016/6/10 22:59:00的发言:

大红袍老师

 

  这两个值我的例子里也已经可以输入了。就是密码不行。哎,看样子真的不好搞。

 

不太清楚,应该是人家网页做了js限制。

 

试试用 webkit http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=84533&skin=0

 


--  作者:ap9709130
--  发布时间:2016/6/11 13:54:00
--  
大红袍老师

   只有IE才可以登陆的,我用chrome手动操作也不行的。可以用代码操作IE吗?还有什么好的方法? 其实财务人员大部分的时间,都消耗在这种固定操作的时间上,我一直想做点东西。现在网站上那个动态的图片的登陆码我已经找到解决方法,应该就只有对网页的操作这块了。按道理,网页上的所有控件都是可以操作才对的。

--  作者:大红袍
--  发布时间:2016/6/11 14:48:00
--  

试试这样

 

Dim ie = CreateObject("internetexplorer.application")
ie.Visible = True
ie.Navigate("http://www.foxtable.com")

 

http://www.foxtable.com/bbs/query.asp?keyword=internetexplorer.application&boardid=0&sType=7&stable=Dv_bbs1&submit=%D5%BE%C4%DA%CB%D1%CB%F7

 


--  作者:ap9709130
--  发布时间:2016/6/11 15:25:00
--  

红袍老师

 

我用你给的办法试了一下,结合网站上能找到的资料,我改一下,请看以下代码:

 

Dim OjbIe As Object = CreateObject("InternetExplorer.Application")
With OjbIe
    .Visible = 1
    .Navigate("http://www.foxtable.com/bbs/index.asp?boardid=2")
    Application.DoEvents
    Do While .Busy
        Application.DoEvents
    Loop
    Dim DoM As Object = .Document

    With DoM

        If .Body.OuterHtml.Contains("javascript:Dv_Win_Modal.Open(\'login_win.asp?winaction=winlogin\',500,350);") Then \'判断一下当前页面的是否包含这串字符串(用来判断是否已经处于登录状态)

            Dim hec As System.Windows.Forms.HtmlElementCollection = .GetElementsByTagName("a") \'获得当前页面的A标签HTML元素集合
            For i As Integer = 0 To hec.Count-1 \'循环所有A标签
                If hec(i).OuterHtml.Contains("javascript:Dv_Win_Modal.Open(\'login_win.asp?winaction=winlogin\',500,350);") Then \'判断该A标签是否包含这个字符串(如果包含说明该A标签是登录按钮)
                    hec(i).InvokeMember("click") \'执行该标签的点击方法,从而实现点击登录按钮
                    \'lb="登录"  \'把LB设置为"登录" 这样下一步就回执行Case "登录" 里面的代码
                    Do While .Busy
                        Application.DoEvents
                    Loop
                   
                    Exit For  \'既然已经找到了这个A标签,没有必须继续循环了.退出循环
                End If
            Next
        Else \'发现页面没有包含该字符串,说明没有登录按钮,处于已经登录状态
            Dim hec As System.Windows.Forms.HtmlElementCollection = .GetElementsByTagName("a")  \'获得当前页面的A标签HTML元素集合
            For i As Integer = 0 To hec.Count-1 \'循环所有A标签
                If hec(i).OuterHtml.Contains("logout.asp") Then  \'判断这个A标签是否包含这个字符串,如果包含说明是退出登录按钮
                    hec(i).InvokeMember("click") \'执行该A标签的点击方法,从而实现点击退出按钮.
                    \'lb="访问" \'\'把LB设置为"登录" 这样下一步就回执行Case "访问" 里面的代
                    Do While .Busy
                        Application.DoEvents
                    Loop
                   
                    Exit For
                End If
            Next
        End If
       
        .Window.Frames(1).Document.GetElementById("username").SetAttribute("Value","test138") \'获得第二个FrAMES框架里面的ID为"username"的的HTML标签元素,并且将其Value设置为"test138"
        .Window.Frames(1).Document.GetElementById("pwd1").SetAttribute("Value","a110110") \'获得第二个FrAMES框架里面的ID为"pwd1"的的HTML标签元素,并且将其Value设置为"a110110"
        \'MessageBox.show(9)
        \'如果元素不是在Frame框架中,那么直接 web.Document.GetElementById 即可
        \'如果元素没有ID怎么办? 按照上面的方法,获得指定类型的元素集合,然后循环判断是否包含该字段的方法来获得.
        \'下面的代码都大同小异,就不一一介绍了.
        Dim hec1 As System.Windows.Forms.HtmlElementCollection = .Window.Frames(1).Document.GetElementsByTagName("input")
        For i As Integer = 0 To hec1.Count-1
            If hec1(i).OuterHtml.Contains("立即登录") Then
                hec1(i).InvokeMember("click")
               
                Exit For
            End If
        Next
       
       
       
    End With
    .Visible = 1
    .quit
End With


可以打开IE ,但代码   If .Body.OuterHtml.Contains("javascript:Dv_Win_Modal.Open(\'login_win.asp?winaction=winlogin\',500,350);") Then  会出错。IE中Document的对象和属性要怎么写?