自从两周以来,我一直在尝试自动化网页,但在第3页后我无法继续进行。
首先,我通过提供凭据登录登录页面,然后点击第2页的链接。在此之前,我很好;但在那之后我又需要点击第3页上我无法做到的另一个链接,即使我无法阅读该特定页面的正确innerhtml
。 innerhtmal
与该页面的源代码不同。使用源代码我已经使用id / name来获取元素但没有用。我看到的问题是DOCUMENT对象没有采用第3页的内部细节。当我尝试打印该页面的链接时,它在该页面中打印了一些常用链接,这些链接将在所有页面中可用,而不是打印该特定页面中的所有链接。我想这可能会发生,因为页面框架相对于FromDate&至今。如果我错了,请原谅我。我们是否需要每次改变" ie.document"关于网页导航的对象?因为我认为第一次加载页面时它会坚持不变。
Public Sub Test ()
Dim shellWins As ShellWindows
Dim ie As InternetExplorer
Dim doc As HTMLDocument
Dim frm As HTMLFrameElement
Dim frms As HTMLElementCollection
Dim strSQL As String
Dim Login As Boolean
strSQL = "https://website.com"
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate strSQL
Do Until .ReadyState = 4: DoEvents: Loop
Set doc = ie.document
Dim link As Object
For Each link In doc.Links
'Debug.Print link.innerText
If link.innerText = "Click Here" Then
link.Click
Exit For
End If
Next link
Do While ie.Busy: DoEvents: Loop
Login_Pane:
For Each link In doc.Links
If link.innerText = "Leave & Attendance" Then
'Debug.Print doc.body.innerHTML
link.Click
Login = True
Exit For
End If
Next link
If Login <> True Then
Application.Wait (Now + TimeValue("00:00:02"))
Application.SendKeys "<USERNAME>", True
Application.SendKeys "{TAB}"
Application.Wait (Now + TimeValue("00:00:02"))
Application.SendKeys "<PASSWORD>", True
Application.SendKeys "{ENTER}"
GoTo Login_Pane
End If
Do While ie.Busy: DoEvents: Loop
Dim link As Object
For Each link In doc.Links
Debug.Print link.innerText
' Above line code should print all the links in that page_
_but unfortunatly it is not displaying as it is in the source code.
' instead printing half of the links which are commonly_ _available in all pages.
' This page has three frames
Next link
End With
'IE.Quit
End Sub
我无法发布该页面的图片以使您了解更多,无论如何我会尽力而为。
当我使用下面的代码时,我只能从页面的上半部分获取链接。
设置doc = ie.document 昏暗的文本作为对象 对于每个文本在doc.Links中 Debug.Print text.innerText 下一个文字
在页面的该部分下方,我可以选择输入FromDate&amp; ToDate,通过给这个文本框提供日期,我将能够根据日期查看详细信息(默认情况下,页面显示从当月的第一天到当月的当前日期的详细信息)。
所以,我在这里没有得到链接/或其他细节。我认为这部分的细节不存储在ie.document对象中。 仅此特定部分与主页面具有不同的URL。
感谢。
答案 0 :(得分:0)
有几点想法:
Application.Wait
(5秒左右)而不是Do Until .ReadyState = 4: DoEvents: Loop
。如果你正在执行javascript,后者不起作用。