以文本方式查看主题 - 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浏览器) 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关键技术点 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)模拟点击 找到元素后,可以模拟点击 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 ===================================================================== 杰哥免费分享的web系统 =============================================================== 顺便总结以前分享过的帖子,方便大家学习 联系QQ:2385350359 经验分享: [此贴子已经被作者于2025/4/20 20:14:55编辑过]
|
|
-- 作者:程兴刚 -- 发布时间:2025/4/20 20:11:00 -- 还没用到,只要是为了支持狐表的发展中深造,但必须顶起来! |
|
-- 作者:冷泉 -- 发布时间:2025/4/21 9:29:00 -- 顶顶!!!!! |