我试图将一个值放入公司 Intranet 网页框架内的文本框中 .aspx 并根据文本框中输入的值提取数据。似乎没有任何效果,我尝试使用此代码 IE.document.getElementsByTagName("select")(1).Value = "optionvalue"
单击并更改登录屏幕中的下拉列表,这有效。我能够自动登录网页,所以我知道“getElements 可以工作,但登录后显然没有检测到网页中的元素,例如 textbox 和 dropdownlists .
今天我发现造成这种情况的原因是由于我尝试查看源代码的网页内存在多帧,并且显然它分为三个框架Banner,CSLeftFrame 和 CSMainFrame。
这是我当前的代码
Dim IE As InternetExplorerMedium
Dim objCollection As Object
________________________________________________________________________________
Private Sub AccesLoginLink()
Set IE = New InternetExplorerMedium
IE.navigate "Https://website.aspx"
IE.visible = true
PageLoadStart
End Sub
________________________________________________________________________________
Private Sub automatereview_click()
If IE Is Nothing Then Set IE = New InternetExplorerMedium
IE.navigate "Https://framewebsite.aspx"
IE.Visible = True
PageLoadStart
IE.document.getElementByTagName("select")(0).Value = "Option in a dropdown"
________________________________________________________________________________
Private Sub PageLoadStart
While IE.Busy Or IE.readyState <> 4: DoEvents: Wend
End Sub
我在上面的代码中所做的是访问我在 View 源中看到的横幅框架链接,这就是我导航并更改下拉选项以进行测试的地方,它显然有效,但发生的是 BannerFrame是唯一加载的框架。有没有办法单击按钮或在文本框中输入值或在框架内抓取数据?
我遇到困难的原因是因为我对何时检查元素感到困惑,在我的理解中,文本框位于主体类leftframe的主体中> 在具有相同框架名称和 ID someLeftPage 的框架中,源是位于具有名称的 iframe 中的 CSLeftFrame form 内的 、 id、class 和 source,其名称、id、action 和方法均位于 frame 内的 contentframe 名称中> 其中有名称、id、src。
这里是 HTML 代码的图片,为了让您更容易理解,我突出显示了 文本框 和 下拉列表 的元素标签。下面是页面的检查元素代码。
要单击的搜索栏和按钮位于表单ID内,其操作= CSLeftFrame.aspx**,位于主体类LeftFrame内,其中所有这些都在 iFrame 内,上面提到的所有内容都在 Form 内,其 action = content.aspx 和框架内名称为 ContentFrame。
最佳答案
IE.Document.GetElementById("ctlsearch_ddlSearchOptions").value = "NNum" '<----change this to what ever value that is listed.
IE.Document.GetElementById("ctlsearch_ddlSearchOptions").FireEvent ("onchange")
Sleep (2000) '<---- I use a way to pause the script because it can sometimes take so time fot the onchange event to take effect.
SearchText = "The text that I am seaching for" '<----change this to the text you are searching for.
IE.Document.GetElementById("ctlSearch_txtfind").value = SearchText
如果有多个框架/表格/表单,在没有看到所有内容的情况下很难判断。所以这些不包括任何类型的层次结构。如果有,您需要在 .Document
之后包含 getElementByid()
或 getElementsByTagName()(0)
。
关于javascript - 使用 VBA 自动执行数据抓取以及在多框架 Intranet 网页内按下按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44815705/