以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [杰哥的免费分享] 狐表自动打开网页并填入账号密码(仅适用IE浏览器)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=196360)

--  作者:chen37280600
--  发布时间:2025/4/20 20:06:00
--  [杰哥的免费分享] 狐表自动打开网页并填入账号密码(仅适用IE浏览器)

(快速浏览杰哥分享过的所有经验汇总,点击跳转


前言:之前论坛也有一些帖子,不过基本是基于JQuery年代的,有些方法已经不再适应现在的Vue/React之类的异步加载网站,所以我整合并做了优化改进。
虽然IE浏览器已经有些过时,不过刚好遇到有狐友需要,顺便做得整合。

1需求
自动打开网页,点击登录按钮,到了登录窗口,输入账号密码
(由于狐表.net版本的限制,只能调用IE浏览器,无法控制第三方Chrome浏览器)


此主题相关图片如下:1.png
按此在新窗口浏览图片


此主题相关图片如下:2.png
按此在新窗口浏览图片

2实现代码
1)全局代码

以下内容只有回复后才可以浏览

2)业务代码

\'1关闭所有相关的IE浏览器,免得重复出错
Dim shell As Object = CreateObject("Shell.Application")
Dim win As Object
For Each win In shell.Windows
    If InStr(win.FullName, "iexplore.exe") > 0 Then
        If InStr(win.LocationURL, "etax.zhejiang.chinatax.gov.cn") > 0 Then \'这里改成你的业务域名,不需要http
            win.Quit
            Exit For
        End If
    End If
Next

\'2初始化新的IE浏览器
Dim ie As Object = CreateObject("InternetExplorer.Application")
ie.Visible = True

\'3先登录首页
ie.Navigate("https://etax.zhejiang.chinatax.gov.cn:8443/") \'这里改成你的业务网址
Sleep(4000) \'由于这是个Vue异步加载的页面,要给时间它异步加载(如果网络差,建议延长)

\'4点击登录按钮,跳转到登录窗口
Dim Spans = ie.Document.GetElementsByTagName("span")
For Each Span As Object In Spans
    If Span.GetAttribute("class").ToString = "loginBtnText" Then
        Span.Click 
    End If 
Next 
Sleep(4000) \'等异步加载

\'5找到账号密码,并输入
Dim Inputs = ie.Document.GetElementsByTagName("input")
For Each Input As Object In Inputs
    Select Case Input.GetAttribute("placeholder").ToString 
        Case "统一社会信用代码/纳税人识别号"
            input.Focus()
            Sleep(300) \' 延迟让focus生效
            SendKeys.SendWait("914400007578948436")
        Case "居民身份证号码/手机号码/用户名"
            input.Focus()
            Sleep(300) \' 延迟让focus生效
            SendKeys.SendWait("13427100453")
        Case "个人用户密码"
            input.Focus()
            Sleep(300) \' 延迟让focus生效
            SendKeys.SendWait("123")
    End Select 
Next


此主题相关图片如下:3.png
按此在新窗口浏览图片

3关键技术点
1)先关闭相关浏览器
重复打开IE浏览器,会导致获取元素异常(例如报错`RPC 服务器不可用。 (异常来自 HRESULT:0x800706BA)`),
所以要先关闭好

\'1关闭所有相关的IE浏览器,免得重复出错
Dim shell As Object = CreateObject("Shell.Application")
Dim win As Object
For Each win In shell.Windows
    If InStr(win.FullName, "iexplore.exe") > 0 Then
        If InStr(win.LocationURL, "tpass.zhejiang.chinatax.gov.cn") > 0 Then \'这里改成你的业务域名,不需要http
            win.Quit
            Exit For
        End If
    End If
Next


2)异步加载
这是个主流的Vue页面,采用异步加载。所以我们要适当等待,等待元素加载出来,而**不能单纯通过以下代码**,判断浏览器就绪,否则容易获取不到元素而报错
Do While ie.busy Or ie.readystate <> 4
    Application.DoEvents
Loop

3)定位元素
利用Dim Inputs = ie.Document.GetElementsByTagName("input")找到某种元素的集合,例如这里找到所有的input标签元素。
然后我们去看下要定位的元素,有什么特征。在浏览器按F12,进入网页元素控制台

此主题相关图片如下:4.png
按此在新窗口浏览图片

4)模拟点击
找到元素后,可以模拟点击
Dim Spans = ie.Document.GetElementsByTagName("span")
For Each Span As Object In Spans
    If Span.GetAttribute("class").ToString = "loginBtnText" Then
        Span.Click 
    End If 
Next 

5)模拟输入
找到元素后,可以模拟键盘输入
Dim Inputs = ie.Document.GetElementsByTagName("input")
For Each Input As Object In Inputs
    Select Case Input.GetAttribute("placeholder").ToString 
        Case "统一社会信用代码/纳税人识别号"
            input.Focus()
            Sleep(300) \' 延迟让focus生效
            SendKeys.SendWait("914400007578948436")
    End Select 
Next


注意:Vue/React 前端动态框架阻止了直接 DOM 注入生效的现象,所以狐表论坛里,以下传统的写法是失效的
\'这种是失效的
Dim inputs = ie.Document.GetElementsByTagName("input")
For Each input As Object In inputs
    If input.getAttribute("placeholder") = "个人用户密码" Then
        input.setAttribute("value", 123) 
    End If
Next


此主题相关图片如下:5.png
按此在新窗口浏览图片

=====================================================================
杰哥免费分享的web系统






===============================================================
顺便总结以前分享过的帖子,方便大家学习

联系QQ:2385350359


经验分享:























[此贴子已经被作者于2025/4/20 20:14:55编辑过]

--  作者:程兴刚
--  发布时间:2025/4/20 20:11:00
--  
还没用到,只要是为了支持狐表的发展中深造,但必须顶起来!
--  作者:冷泉
--  发布时间:2025/4/21 9:29:00
--  
顶顶!!!!!