ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 15619|回复: 32

[求助] 如何输入网站用户名、密码、验证码,然后自动登陆系统?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-9-6 10:07 | 显示全部楼层 |阅读模式
我想做一个飞信自动发短信的程序,我的想法是先用POST方法登陆系统(网址为:http://f.10086.cn/im/login/inputpasssubmit1.action),之后再用POST方法发送短息。之前论坛里也有飞信方面的接口(见http://club.excelhome.net/forum.php?mod=viewthread&tid=744110),但是这个接口已经用不了了,因为登陆的时候多了一个验证码,所以不能用原来的方法即输入用户名,密码,然后POST自动登陆,再POST发信息。我的问题是如果手动输入用户名、密码、验证码,然后再用XMLHTTP对象 POST登陆系该如何做呢?我查了很多地方都没有这方面的资料。我也尝试了很多方法比如:
Sub TT()   ‘参考了http://club.excelhome.net/thread-899268-1-1.html
    Dim CookieHeaders, Cookie, i&, HTML$, CODE$, st$
    Dim tmp() As String, p As Long, arr() As String, xmlhttp As Object, t As Single
    Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
    With xmlhttp
        .Option(6) = 0
        .Open "GET", " http://f.10086.cn/im/login/inputpass.action", False
        .setRequestHeader "Connection", "keep-alive"
        .SEND
        
         Cookie = .getallResponseHeaders()
'         With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")                   'DataObject对象,数据放入剪贴板,记事本观察数据
'             .SetText Cookie
'             .PutInClipboard
'         End With
         CookieHeaders = Filter(Split(.getallResponseHeaders(), Chr(10)), "Set-Cookie")    '获取Cookie
         For i = 0 To UBound(CookieHeaders)
               CookieHeaders(i) = Split(Split(CookieHeaders(i), ": ")(1), ";")(0)
         Next
         Cookie = ""
         For i = 0 To i - 1
            Cookie = Cookie & CookieHeaders(i) & ";"
         Next
         Cookie = Left(Cookie, Len(Cookie) - 1)
         HTML = .responsetext
         ’Debug.Print HTML
         st = getPitureString(HTML)‘获取源码里的验证码图片的地址
         Call DownloadImage(st, "C:\verifycode.jpeg")’把图片下载到本地
         UserForm1.Show‘显示下载到本地的验证码图片,并手动输入验证码
         CODE = UserForm1.TextBox1.Text’获取验证码
    End With
    With xmlhttp
        .Open "POST", "http://f.10086.cn/im/login/inputpass.action", False
        .Option(6) = 1
        .setRequestHeader "Referer", "http://f.10086.cn"
        .setRequestHeader "Cookie", Cookie
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .setRequestHeader "Content-Length", Len("m=12312321&pass=212312113&loginstatus=4&captchaCode=" & CODE)
        .setRequestHeader "Connection", "Keep-Alive"
        .SEND "m=12312321&pass=212312113&loginstatus=4&captchaCode=" & CODE
        HTML = .responsetext
        Debug.Print HTML
    End With
    Set xmlhttp = Nothing
End Sub

最后发现还是登陆不了,说验证码错误。我是先显示登陆页获取验证码及COOKIE,然后用该COOKIE及获取的验证码POST登陆。不知为什么不行,求高手指教?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-7 12:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我想做一个飞信自动发短信的程序,我的想法是先用POST方法登陆系统(网址为:http://f.10086.cn/im/login/inputpasssubmit1.action),之后再用POST方法发送短息。之前论坛里也有飞信方面的接口(见http://club.excelhome.net/forum.php?mod=viewthread&tid=744110),但是这个接口已经用不了了,因为登陆的时候多了一个验证码,所以不能用原来的方法即输入用户名,密码,然后POST自动登陆,再POST发信息。我的问题是如果手动输入用户名、密码、验证码,然后再用XMLHTTP对象 POST登陆系该如何做呢?我查了很多地方都没有这方面的资料。我也尝试了很多方法比如:
  1. Sub TT()   ‘参考了http://club.excelhome.net/thread-899268-1-1.html
  2.      Dim CookieHeaders, Cookie, i&, HTML$, CODE$, st$
  3.      Dim tmp() As String, p As Long, arr() As String, xmlhttp As Object, t As Single
  4.      Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  5.      With xmlhttp
  6.          .Option(6) = 0
  7.          .Open "GET", " http://f.10086.cn/im/login/inputpass.action", False
  8.          .setRequestHeader "Connection", "keep-alive"
  9.          .SEND
  10.          
  11.           Cookie = .getallResponseHeaders()
  12. '         With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")                   'DataObject对象,数据放入剪贴板,记事本观察数据
  13. '             .SetText Cookie
  14. '             .PutInClipboard
  15. '         End With
  16.           CookieHeaders = Filter(Split(.getallResponseHeaders(), Chr(10)), "Set-Cookie")    '获取Cookie
  17.           For i = 0 To UBound(CookieHeaders)
  18.                 CookieHeaders(i) = Split(Split(CookieHeaders(i), ": ")(1), ";")(0)
  19.           Next
  20.           Cookie = ""
  21.           For i = 0 To i - 1
  22.              Cookie = Cookie & CookieHeaders(i) & ";"
  23.           Next
  24.           Cookie = Left(Cookie, Len(Cookie) - 1)
  25.           HTML = .responsetext
  26.           ’Debug.Print HTML
  27.           st = getPitureString(HTML)‘获取源码里的验证码图片的地址
  28.           Call DownloadImage(st, "C:\verifycode.jpeg")’把图片下载到本地
  29.           UserForm1.Show‘显示下载到本地的验证码图片,并手动输入验证码
  30.           CODE = UserForm1.TextBox1.Text’获取验证码
  31.      End With
  32.      With xmlhttp
  33.          .Open "POST", "http://f.10086.cn/im/login/inputpass.action", False
  34.          .Option(6) = 1
  35.          .setRequestHeader "Referer", "http://f.10086.cn"
  36.          .setRequestHeader "Cookie", Cookie
  37.          .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  38.          .setRequestHeader "Content-Length", Len("m=12312321&pass=212312113&loginstatus=4&captchaCode=" & CODE)
  39.          .setRequestHeader "Connection", "Keep-Alive"
  40.          .SEND "m=12312321&pass=212312113&loginstatus=4&captchaCode=" & CODE
  41.          HTML = .responsetext
  42.          Debug.Print HTML
  43.      End With
  44.      Set xmlhttp = Nothing
  45. End Sub
复制代码
最后发现还是登陆不了,说验证码错误。我是先显示登陆页获取验证码及COOKIE,然后用该COOKIE及获取的验证码POST登陆。不知为什么不行,求高手指教?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-9 08:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看来这个问题的确太难了,自已先顶一下吧

TA的精华主题

TA的得分主题

发表于 2012-9-9 09:33 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-9 09:33 | 显示全部楼层
这里,好像不用验证码:
https://feixin.10086.cn/Account/LoginDiv

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-19 12:06 | 显示全部楼层
蓝天630902 发表于 2012-9-9 09:33
这里,好像不用验证码:
https://feixin.10086.cn/Account/LoginDiv

虽然不用验证码,但是发不了信息阿

TA的精华主题

TA的得分主题

发表于 2012-9-19 17:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-21 08:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-21 08:14 | 显示全部楼层
经过无数次的试验,终于把带验证码的飞信自动登陆搞定,有INET和XMLHTTP两种方式,XP+OFFICE2003环境下测试通过。下面想看看有没有办法用OCR的方法自动识别图片,而不用手动输入。感兴趣的可以一起讨论一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-20 08:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有个WEBQQ的登陆方式,目前正在学习。到时与大家分享
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 23:08 , Processed in 0.044194 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表