VB,自动登录已经完成了,但网页元素没有id,没有name,里面的自动点击怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB,自动登录已经完成了,但网页元素没有id,没有name,里面的自动点击怎么办?相关的知识,希望对你有一定的参考价值。

Private Sub Workbook_Open()
Dim ie As InternetExplorer Dim doc As htmlDocument Set ie = New InternetExplorer ie.navigate "http://10.33.113.10/tjmlk/Modules/%e7%99%bb%e5%bd%95/%e7%99%bb%e5%bd%95.aspx?E=%e7%99%bb%e5%bd%95" ie.Visible = True
Do DoEvents Loop Until ie.readyState = 4 '在网页没有完全下载之前,VB 转让控制权 If ie.LocationURL = "http://10.33.113.10/tjmlk/main/index.aspx" Then Exit Sub '如果已经登录,退出程序

Set doc = ie.document doc.getElementById("edtUserName").Value = "XXX" doc.getElementById("edtPassword").Value = "XXX" doc.getElementById("btnOk").Click Set doc = Nothing Set doc = ie.document Set ie = Nothing
End Sub

这是自动登录的,登录内网的。
后面怎么写。。

要点名录维护,然后点法人单位维护
名录维护的ID、name都没有。得用tagname遍历吗?如何遍历?tagname是A吗?

先查看你的HTML源文件,看看这是一个什么TAG,以及它的标签内有哪些参数。
然后,在Set doc = ie.document后一句设断点,运行程序在该点中断时,把doc添加进监视,查看DOC下面DOC.all下面的ITEM x,找到你刚刚看的那个TAG,看看X是多少就是all的第x个元素,因为调用时是从0开始,所以要把x-1,然后就可以调用了。
DOC.body.all(x-1).click

如果你的doc经常会变化,也就是如果那个X经常变化,也可以在body下面的childNodes或children下面继续查找比较固定的子节点,并找到一个比较稳定的路径来调用这个控件。如果这个路径上有子节点有ID或name,就可以用你刚刚的方法直接先找到该子节点,并以此为基础再往下找到你要的那个TAG。

当然你也可以用“for each 变量 in...”来历遍doc.all或childNodes。追问

额,这部分没问题了,就是进去填表,用遍历的方法一直提示错误438,但我反复比较,没看出哪写错了啊。

比如这两个,无论我怎么赋值,要么没反映,要么就提示对象不可用之类的

 

是因为框架问题吗?比如我的操作都发生在框架1上,但我要的结果,实际都在框架2上?

追答

应该是你的代码调用了并不存在的属性,这个需要你的代码以及你要处理的那个HTML的文档才好分析是什么原因。
另外,你上的图片中的两个INPUT控件都有id和name啊?

追问

- -!每次打开都随机产生的

参考技术A

可以用遍历的方法,下面给一小段代码,doc变量你自己定义吧。

Dim a As IHTMLElementCollection, ai As HTMLAnchorElement
Set a = doc.getElementsByTagName("A")
For Each ai In a
    If InStr(1, ai.innerHTML, "名录维护", vbTextCompare) > 0 Then
        ai.Click
        Exit For
    End If
Next

再点法人单位维护,也可以这样做。

追问

这部分我自己搞好了,现在的问题是我进去填表,一样没有name,id,用遍历又提示438错误。顺便问一下,你是何众芳?

追答

跟你一样,也是瑞安的。
不知道你用什么方法去遍历的,另外你这里还有框架的问题。
你最好将这个页面保存下来,再附件上传到这里,这样也好让大家研究。

追问

百度只能图片形式上传的
搞得差不多了,不过是用楼上的方法。不好意思额。

参考技术B 你查看一下源代码,看看名录维护,法人单位维护点击后调用的函数,直接执行函数即可...
例如:WB.Document.parentWindow.execScript "showEnInfoInMap()"
wb是webbrowser控件。
参考技术C 用 网页自动操作通用工具,自动获取无ID元素

网页怎么自动记住密码?

以前在网站上面登陆用户的时候有个提示,可以让电脑记住密码的。可是现在没有了,不过只有用户名可以选,选好之后就自动生成密码了,每次登陆都要选用户名才能登陆。是不是因为用户名太多了才会这样啊?
我现在想进入百度知道时就直接登陆我的帐号请问有办法吗?
是在浏览器里面点工具吧,然后在点内容再点自动完成。可是里面所有的我都打了勾了呀,还是没有。不在知道问题出在哪了。

vivo手机在浏览器上登录网址首次输入密码时,会有弹窗出现,内容为:是否希望浏览器记住此密码,可以根据实际情况,选择“永不、记住、或暂不保存”选项。若选择了记住,需要清除,可以在浏览器设置中清除记录中勾选保存密码。
注:此操作可会清除浏览器上保存的所有密码,建议慎重。
参考技术A

网页能够保存密码是因为第一次登陆的时候会保存“用户名和密码”信息,只要下次登陆不删除即可。

第一步:点击浏览器右上角的设置按钮,进入“Internet选项界面”。

第二步:选择“删除”按钮,将弹出框中“密码”前面的勾去掉,之后点击“确定”即可完成设置。

备注:一般“密码”都是有cookie失效时间,也就是一段时间不访问这个用户,之后会自动失效,这个没办法解决,只能是用户重新输入密码。

参考技术B 在桌面用鼠标右键点击IE图标,再点属性。选上面的“内容”按钮。再点下面的“自动完成”按钮。
将“自运完成功能应用于”用户名、密码勾选上。本回答被提问者采纳
参考技术C 桌面上ie图标点右键--属性--连接--自动完成--表单上的用户名和密码--打上勾,确定! 参考技术D

你好,让网页记住密码是极不安全的做法。

KeePass下载和使用图解

其实可以用开源专业的密码软件KeePass来管理密码,非常安全。它也可以自动登录网页,这样就不用网页记住密码了。

以上是关于VB,自动登录已经完成了,但网页元素没有id,没有name,里面的自动点击怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

vb怎么获取网页中的每个元素内容

怎么用VBS脚本点击网页中的某个按钮(这个按钮没有元素ID)

使用 Python 自动登录到我的本地网页

Visual Basic 19 - WebView2 - 自动单击网页按钮

vb中提取网页中的数据

C# 使用webBrowser控件获取网页中的账号密码登录网页元素并自动填写模拟自动登录?