【问题标题】:VBA to open webpage then submit dataVBA打开网页然后提交数据
【发布时间】:2021-10-03 00:46:18
【问题描述】:

我对vba控制的IE很陌生,但偶然写了以下代码,这些代码是通过各种在线搜索拼凑而成的。

我的问题是,如果在单击“单击/提交”之前添加断点(然后转到 IE 窗口),则此代码有效,但在没有断点的情况下运行时似乎不会更新网页。

如果我要破解代码并查看光标在网页上的位置,然后恢复代码,它将保存并更新,但我似乎无法使其正常工作。

非常感谢任何帮助。

Sub test()
url = "Sharepoint - hidden"

Set IE = New InternetExplorerMedium
    IE.Visible = True
    IE.Navigate url
    
    
Dim HTMLDOC As HTMLDocument

Dim MyHTML_Element As IHTMLElement
Do
Loop Until IE.ReadyState = READYSTATE_COMPLETE

Set HTMLDOC = IE.Document


HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_T5").innerText = "New Employee - Test:" & Now()   '[Request Type]
HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_T5").Focus
HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_B3").Click
End sub

【问题讨论】:

  • 也许你需要一些时间延迟,试试Application.Wait?如果您在 Excel 上执行此操作。

标签: html vba web


【解决方案1】:

经过几天尝试各种解决方案,我找到了一个可行的方法,它就像添加更多.Focus 行一样简单,如下所示:

HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_T5").Focus
HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_T5").innerText = "New Employee - Test:" & Now()   '[Request Type]
HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_T5").Focus
HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_B3").Focus
HTMLDOC.all.Item("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_B3").Click

【讨论】:

    【解决方案2】:

    你应该可以使用:

    IE.document.getElementById("ID_Of_Your_Element").Click
    

    如果你的情况,你可以使用:

    HTMLDOC.getElementById("ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_B3").Click
    

    【讨论】:

    • 嗨,斯科特,感谢您的评论。我已经尝试过您的建议,当它单击提交按钮时,当我返回站点并检查更新时,它不会更新值。
    • 网站是什么?可以分享一下吗?
    • 对不起,这是一个工作分享点网址,所以无法分享。
    • 试试这个。 HTMLDOC.getElementById("Your_Id_Here").getElementsByTag‌​Name("input")(0).Click 这假设页面上只有一个提交按钮(因为括号中的 0)并且标签名称是“input”。
    • 感谢您的建议,但遗憾的是,一旦页面在保存时刷新,输入的数据就不会保留。
    【解决方案3】:

    抱歉,我还没有足够的声望来发布 cmets。 在进行自动化时,您需要放慢速度。在与 HTMLDOC 交互的每一行之后尝试使用我的 Pause() 子例程。从 2 秒开始,然后在测试可靠性时逐渐减少。类似于以下内容(未测试)。

    使用 VBA 自动化浏览器的更好方法是使用 Selenium。我推荐观看 Gove Allen 的 this 优秀教程。

    Sub test()
       Const SPEED = 2.0 'reduce 
       url = "Sharepoint - hidden"
    
       Set IE = New InternetExplorerMedium
       IE.Visible = True: Pause SPEED
       IE.Navigate url: Pause 5
        
        
       Dim HTMLDOC As HTMLDocument
    
       Dim MyHTML_Element As IHTMLElement
       Do
       Loop Until IE.ReadyState = READYSTATE_COMPLETE
    
       Set HTMLDOC = IE.Document
    
       Dim sCntrl1 as string: sCntrl1 = "ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_T5"
       Dim sCntrl2 as string: sCntrl2 = "ctl00_ctl40_g_07433f93_b974_4a29_9e53_cc3a087aa20a_FormControl0_V1_I1_B3"
       HTMLDOC.all.Item(sCntrl1).innerText = "New Employee - Test:" & Now() : Pause SPEED
       HTMLDOC.all.Item(sCntrl1).Focus : Pause SPEED
       HTMLDOC.all.Item(sCntrl2).Click : Pause SPEED
    End sub
    

    【讨论】:

    • 感谢您的建议,代码运行无误。页面刷新后,网页上的值不会更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2023-03-11
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多