【问题标题】:Detect and Click on a javascript alert with vba使用 vba 检测并单击 javascript 警报
【发布时间】:2020-07-02 21:25:31
【问题描述】:

我正在尝试浏览网站的网页抓取结果,唯一的问题是当我输入无效输入时,它会抛出一个 java 警告框,我无法使用 VBA 代码克服。

代码如下

Sub TIN_VERIFY_TN()
Dim ie As Object
Dim form As Variant, button As Variant
Dim pannumss As Characters
Set ie = CreateObject("InternetExplorer.application")

With ie

.Visible = True
.Navigate ("http://www.tnvat.gov.in/tamil/Tinverification.aspx")
Do While ie.Busy: DoEvents: Loop

countsss = WorksheetFunction.CountA(Range("A:A"))
For X = 2 To countsss
ie.Document.getelementsbyname("txt_tngst").Item.Value = Cells(X, 1)

 ie.Navigate "javascript:__doPostBack('LinkButton2','')"
 
  Do While ie.Busy Or Not ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop

  Cells(X, 2) = ie.Document.getElementById("txtName").innerText

  ie.Navigate ("http://www.tnvat.gov.in/tamil/Tinverification.aspx")
  Do While ie.Busy: DoEvents: Loop

  Next
  End With
  Set ie = Nothing
End Sub

认为这是创建 msgbox 的事件

<Script language='javascript'>alert('Invalid TIN No');</script><script language='javascript'>document.getElementById('txt_tngst').focus();</script></form>
        </body>
    </HTML>

我如何知道警报何时触发以及警报出现后我应该如何关闭它?

【问题讨论】:

  • 能否提供任何有效的TIN No 进行测试?
  • 您好,很抱歉周末没有在城里回复延迟。已经给出了两个 TIN 的 33543227809(一个无效)和 33623682307(一个有效)。希望这会有所帮助。

标签: excel vba


【解决方案1】:

尝试在 readystate 完成之前阻止 .execCommand "stop" 执行脚本:

Sub TIN_VERIFY_TN()

    Const READYSTATE_UNINITIALIZED = 0
    Const READYSTATE_LOADING = 1
    Const READYSTATE_LOADED = 2
    Const READYSTATE_INTERACTIVE = 3
    Const READYSTATE_COMPLETE = 4

    Dim ie As Object
    Dim form As Variant, button As Variant
    Dim pannumss As Characters
    Dim cnt As Long
    Dim x As Long
    Dim a

    Set ie = CreateObject("InternetExplorer.application")
    With ie
        .Visible = True
        cnt = WorksheetFunction.CountA(Range("A:A"))
        For x = 2 To cnt
            .Navigate "http://www.tnvat.gov.in/tamil/Tinverification.aspx"
            Do While .busy Or Not .readyState = READYSTATE_COMPLETE: DoEvents: Loop
            .document.getElementsByName("txt_tngst").Item.Value = Cells(x, 1)
            .document.parentWindow.execScript "__doPostBack('LinkButton2','')", "javascript"
            Do While .readyState < READYSTATE_INTERACTIVE: DoEvents: Loop
            .document.execCommand "stop"
            Do While .busy Or Not .readyState = READYSTATE_COMPLETE: DoEvents: Loop
            a = Array(.document.getElementById("txtName"))
            If TypeName(a(0)) <> "Null" Then Cells(x, 2) = a(0).innerText
        Next
    End With

End Sub

【讨论】:

  • 嗨欧米茄。感谢您的代码。该代码现在似乎没有执行提交功能。基本上下面的代码现在没有加载结果 .document.parentWindow.execScript "
【解决方案2】:

尝试了很多,并且可以找到一种方法来完成任务 创建一个 vbscript 即 *.vbs 文件 - 添加等待时间和输入代码以传递 Enter 键将其保存在本地电脑上 在单击按钮或填写相应字段之前调用此 vbscript... 就我而言,我在单击按钮时收到警报/消息。

【讨论】: