gpt4 book ai didi

VBA-Excel : Filling forms in an IE Window

转载 作者:行者123 更新时间:2023-12-04 20:37:11 25 4
gpt4 key购买 nike

我希望有人能帮忙。我正在尝试使用存储在 excel 中的信息来加快填写必须完成数十或数百次的网络表单的过程。

为此,我需要一个按钮来打开一个 IE 窗口并导航到某个网站的登录页面(我已经弄清楚了这一点)。然后,用户可以登录并导航到需要填写的表格。然后,我希望用户能够返回到 excel 页面,单击另一个按钮,这将自动填充几个下拉列表和文本框。

在 Excel 中,我已经有一些代码允许用户搜索需要转到表单的特定信息集,因此他们所要做的就是单击按钮将其传输过来。代码的第一位就是这样:

Public IE As Object

Public Sub OpenIE()
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "loginpage url"
End Sub

但是,我遇到问题的地方是,一旦用户登录并导航到表单,就有不同的功能访问同一个 IE 窗口。现在我有这个:
Sub FillMacro()

Dim sh As Object, oWin As Object

Set sh = CreateObject("Shell.Application")

For Each oWin In sh.Windows
If TypeName(oWin.document) = "HTMLDocument" Then
Set IE = oWin
Exit For
End If
Next

IE.Visible = True
Application.Wait (Now + TimeValue("00:00:01"))
IE.document.getElementById("idec").Value = "John"
Application.Wait (Now + TimeValue("00:00:01"))
IE.document.getElementById("idee").Value = "Smith"
End Sub

我从这个论坛上的其他帖子中获得了大部分内容,虽然我在这方面有点新手,但问题似乎是由于某种原因 VBA 无法找到 ID 为 LastName 的文本框或名。更重要的是, IE.Visible = True 不会将 IE 窗口带回前台,所以我试图找到合适的行来做到这一点。当我尝试运行代码时,我在以下位置收到“需要对象”错误:
IE.document.getElementById("idec").Value = "John"

我已尝试搜索此站点并将继续查找,但在此期间的任何帮助将不胜感激!

在 Internet Explorer 页面上,这是我要填充的第一个文本框的行:
<input name="componentListPanel:componentListView:1:component:patientLastNameContainer:patientLastName" class="input300" id="idec" type="text" maxlength="60" value="">

最佳答案

为什么不自动化记录过程呢?登录信息可以存储在 Excel 中,并通过宏从单元格中读取其值。

正如 Tim Williams 建议的那样,如果网站上有 iframe,请使用(对我来说,它仅适用于包含的 contentwindow):

IE.document.getElementById("iFrameIdHere").contentwindow.document.getEleme‌ntById("idec").Value = "John"

而不是 Application.Wait利用:
Do Until IE.ReadyState = 4 And IE.Busy = False
DoEvents
Loop

当页面快速加载时,它将为您节省大量时间,并在加载超过等待时间时防止错误。仅在页面重新加载后使用它(意味着在导航或任何导致页面重新加载的原因之后,尤其是 HTML 元素上的 .click

使用早期绑定(bind),它比创建对象快一点。它可以根据页面加载速度将性能提高几个百分点,页面加载速度越快,提升越大。
Set IE = New InternetExplorer

最后,您可以切换加载图片,具体取决于您是否需要从网站下载图片。
Public Sub ShowPictures(ByVal EnabledStatus As Boolean)

Public ScrapingCancelled as Boolean
Dim obj_Shell
Dim v_Result As Variant
Set obj_Shell = CreateObject("WScript.Shell")

'Reads the registry key that determines whether 'Show pictures' Internet Explorer advanced setting is enabled

v_Result = obj_Shell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Display Inline Images")

Select Case v_Result
Case "yes" 'Pictures are displayed
If EnabledStatus = False Then _
obj_Shell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Display Inline Images", "no", "REG_SZ"
Case "no" 'Pictures are not displayed
If EnabledStatus = True Then _
obj_Shell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Display Inline Images", "yes", "REG_SZ"
Case Else
ScrapingCancelled = True
End Select

End Sub

未加载图像:
ShowPictures (0)

加载的图像:
ShowPictures (1)

一个好的做法是在宏结束时将值设置为 1。

关于VBA-Excel : Filling forms in an IE Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com