Javascript 如何通过VBA单击网站上的按钮?

Javascript 如何通过VBA单击网站上的按钮?,javascript,excel,vba,web-scraping,Javascript,Excel,Vba,Web Scraping,我试图写一个VBA代码,从一个网站上获取一些信息,并将其导入excel。我可以进入该网站,单击登录按钮,输入登录信息,单击登录按钮,但我无法关闭主页上的“欢迎弹出窗口”。我应该能够通过编写代码来关闭此欢迎弹出窗口,单击“继续”按钮或“退出”“欢迎”弹出窗口上的按钮。每个按钮的Java代码都将发布在我的VBA代码下面。请参见下面的我的VBA代码: 注意:我目前在excel中运行此代码时没有收到任何错误,但它不会关闭欢迎弹出窗口 Sub ASCElogin() Dim objIE As Objec

我试图写一个VBA代码,从一个网站上获取一些信息,并将其导入excel。我可以进入该网站,单击登录按钮,输入登录信息,单击登录按钮,但我无法关闭主页上的“欢迎弹出窗口”。我应该能够通过编写代码来关闭此欢迎弹出窗口,单击“继续”按钮或“退出”“欢迎”弹出窗口上的按钮。每个按钮的Java代码都将发布在我的VBA代码下面。请参见下面的我的VBA代码:

注意:我目前在excel中运行此代码时没有收到任何错误,但它不会关闭欢迎弹出窗口

Sub ASCElogin()

Dim objIE As Object
Dim UserName As String
Dim Password As String
UserName = Range("G7").Value
Password = Range("G8").Value

'Open Internet Explorer
Set objIE = CreateObject("InternetExplorer.Application")

With objIE
.AddressBar = False
.StatusBar = False
.MenuBar = False
.Toolbar = 0
.Visible = True
.navigate "ASCE 7 Hazard Tool"

Do Until Not objIE.Busy And objIE.readyState = 4
DoEvents
Loop

End With

'Clicking Login Button then goes to 'sign in' page
For Each HTMLInputElement In objIE.document.getElementsByClassName("waves-effect waves-light btn 
blue darken-3")
If HTMLInputElement.className = "waves-effect waves-light btn blue darken-3" Then
HTMLInputElement.Click

Exit For

End If

Next HTMLInputElement

Do Until Not objIE.Busy And objIE.readyState = 4
DoEvents
Loop

'Entering UserName
For Each HTMLInputElement In objIE.document.getElementsByName("ctl00$main$LoginTextBox")
If HTMLInputElement.Name = "ctl00$main$LoginTextBox" Then
HTMLInputElement.Value = UserName

Exit For

End If

Next HTMLInputElement

'Entering Password
For Each HTMLInputElement In objIE.document.getElementsByName("ctl00$main$PasswordTextBox")
If HTMLInputElement.Name = "ctl00$main$PasswordTextBox" Then
HTMLInputElement.Value = Password

Exit For

End If

Next HTMLInputElement

'Clicking Sign-In button and go to main page
For Each HTMLInputElement In objIE.document.getElementsByName("ctl00$main$SubmitButton")
If HTMLInputElement.Name = "ctl00$main$SubmitButton" Then
HTMLInputElement.Click

Exit For

End If

Next HTMLInputElement

Do Until Not objIE.Busy And objIE.readyState = 4
DoEvents
Loop

'Closing Welcome Popup - this currently does not close the welcome popup - but I do not get any 
errors

For Each HTMLInputElement In objIE.document.getElementsByClassName("details-popup-close-icon")
If HTMLInputElement.className = "details-popup-close-icon" Then
HTMLInputElement.Click

Exit For

End If

Next HTMLInputElement

End Sub

Java Code:

For the "Continue" button. Continue button is the last line of code below:

<div class="flex flex-column flex-justify-center align-items-center margin-vertical" data- 
reactid=".0.1.0.4.0.1.1">
    <a class="waves-effect waves-light btn blue darken-3" data- 
    reactid=".0.1.0.4.0.1.1.0">Continue</a>

For the exit button in top right corner of the welcome popup. Exit button is last line of code 
below:

<div class="popup-header blue darken-3 welcome-header" data-reactid=".0.1.0.4.0.0">
    <span data-reactid=".0.1.0.4.0.0.0">ASCE 7 Hazard Tool</span>
    <span class="details-popup-close-icon" data-reactid=".0.1.0.4.0.0.1"></span>
Sub-login()
模糊对象
将用户名设置为字符串
将密码设置为字符串
用户名=范围(“G7”)。值
密码=范围(“G8”).值
'打开Internet Explorer
Set objIE=CreateObject(“InternetExplorer.Application”)
与奥布杰
.AddressBar=False
.StatusBar=错误
.MenuBar=False
.Toolbar=0
.Visible=True
.导航“ASCE 7危险工具”
直到没有objIE.Busy和objIE.readyState=4为止
多芬特
环
以
'单击“登录”按钮,然后进入“登录”页面
对于objIE.document.getElementsByClassName(“波浪效果波浪灯光btn”)中的每个HTMLInputElement
蓝色变深-3英寸)
如果HTMLInputElement.className=“波浪效果波浪浅btn蓝色深-3”,则
HTMLInputElement。单击
退出
如果结束
下一个HTMLInputElement
直到没有objIE.Busy和objIE.readyState=4为止
多芬特
环
'输入用户名
对于objIE.document.getElementsByName(“ctl00$main$LoginTextBox”)中的每个HTMLInputElement
如果HTMLInputElement.Name=“ctl00$main$LoginTextBox”,则
HTMLInputElement.Value=用户名
退出
如果结束
下一个HTMLInputElement
'输入密码
对于objIE.document.getElementsByName(“ctl00$main$PasswordTextBox”)中的每个HTMLInputElement
如果HTMLInputElement.Name=“ctl00$main$PasswordTextBox”,则
HTMLInputElement.Value=密码
退出
如果结束
下一个HTMLInputElement
'单击“登录”按钮并转到主页面
对于objIE.document.getElementsByName(“ctl00$main$SubmitButton”)中的每个HTMLInputElement
如果HTMLInputElement.Name=“ctl00$main$SubmitButton”,则
HTMLInputElement。单击
退出
如果结束
下一个HTMLInputElement
直到没有objIE.Busy和objIE.readyState=4为止
多芬特
环
'关闭欢迎弹出窗口-当前不会关闭欢迎弹出窗口-但我没有收到任何
错误
对于objIE.document.getElementsByClassName(“详细信息弹出关闭图标”)中的每个HTMLInputElement
如果HTMLInputElement.className=“详细信息弹出关闭图标”,则
HTMLInputElement。单击
退出
如果结束
下一个HTMLInputElement
端接头
Java代码:
用于“继续”按钮。“继续”按钮是下面最后一行代码:
继续
用于“欢迎”弹出窗口右上角的“退出”按钮。退出按钮是最后一行代码
下:
ASCE 7危险工具
任何帮助都将不胜感激


谢谢,

查看页面本身的源代码和单击处理程序。一些弹出窗口生成的阴影元素实际上负责关闭事件,因此单击该范围实际上并不是关闭对话框的原因。在DOM中,是否有任何JavaScript函数是弹出窗口关闭按钮的一部分。此外,当尝试关闭弹出窗口时,页面是否已完全加载?vba中的索引是使用()而不是[]^^查看父元素的某个类名是否需要添加隐藏类。我看不到您的登录后页面,但在来宾页面示例中,我可以使用:ie.Document.querySelector(“.details popup wrapper+.details popup wrapper”).setattribute“class”,“details popup wrapper hidden”@nikki9696我对编码非常陌生,我不确定“点击处理程序”或“阴影元素”是什么意思。如何查找此弹出框的阴影元素?