Vba 点击IE中的图像按钮
我正在做一个“自动化IE”项目,但在点击图像按钮时被绊倒了 我正在尝试从网站上假脱机一份excel报告,为此,我需要单击“生成”按钮Vba 点击IE中的图像按钮,vba,internet-explorer,web-scraping,Vba,Internet Explorer,Web Scraping,我正在做一个“自动化IE”项目,但在点击图像按钮时被绊倒了 我正在尝试从网站上假脱机一份excel报告,为此,我需要单击“生成”按钮(type=“submit”)``然后会出现一条消息(报告假脱机成功),然后只有我可以单击“下载”按钮(type=“image”)` 屏幕截图 下面是生成按钮HTML源代码 <td align="right"> <input type="submit" name="ctl00$ContentPlaceHolder1$btnGenerate" va
(type=“submit”)``然后会出现一条消息(报告假脱机成功),然后只有我可以单击“下载”按钮(type=“image”)`
屏幕截图
下面是生成按钮HTML源代码
<td align="right">
<input type="submit" name="ctl00$ContentPlaceHolder1$btnGenerate" value=" Generate "
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$btnGenerate", "", true, "", "", false, false))"
id="ctl00_ContentPlaceHolder1_btnGenerate" tabindex="4" title="Click Here" class="dxbButton_Glass">
</td>
<td colspan="2">
<span id="ctl00_ContentPlaceHolder1_lblMsg" style="color:Blue;font-weight:bold;">Report Spooled Successfully</span>
</td>
Sub KBOSS_Brokerage_Process_Status()
Set Browser = CreateObject("internetexplorer.application")
Browser.Visible = false
Browser.navigate ("my url")
Set mymsg = Browser.document.getElementById("ctl00_ContentPlaceHolder1_lblMsg")
For Each elem In mymsg.getElementsByTagName("span")
If elem.innerText = " Report Spooled Successfully " Then Exit For
Next elem
Browser.document.getElementById("ctl00_ContentPlaceHolder1_lnkDownload").Click
Browser.Quit
Set Browser = Nothing
End Sub
使用我的代码,我可以点击Generate
按钮,但在消息出现后点击Download
按钮时遇到困难,我尝试循环直到满足条件,如果Element.innertext=消息
则尝试循环,但运气不佳
下面是我的VBA代码
<td align="right">
<input type="submit" name="ctl00$ContentPlaceHolder1$btnGenerate" value=" Generate "
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$btnGenerate", "", true, "", "", false, false))"
id="ctl00_ContentPlaceHolder1_btnGenerate" tabindex="4" title="Click Here" class="dxbButton_Glass">
</td>
<td colspan="2">
<span id="ctl00_ContentPlaceHolder1_lblMsg" style="color:Blue;font-weight:bold;">Report Spooled Successfully</span>
</td>
Sub KBOSS_Brokerage_Process_Status()
Set Browser = CreateObject("internetexplorer.application")
Browser.Visible = false
Browser.navigate ("my url")
Set mymsg = Browser.document.getElementById("ctl00_ContentPlaceHolder1_lblMsg")
For Each elem In mymsg.getElementsByTagName("span")
If elem.innerText = " Report Spooled Successfully " Then Exit For
Next elem
Browser.document.getElementById("ctl00_ContentPlaceHolder1_lnkDownload").Click
Browser.Quit
Set Browser = Nothing
End Sub
谢谢
交叉柱:
因此,这可能无法解决您的问题,但至少它引入了页面加载的适当等待,包括在每次单击事件之后,以及在文本出现之后的定时循环。我还添加了一个注释掉的FireEvent,以防触发onclick
。您不需要将浏览器
设置为“无”。子系统完成后,将对其进行处理。当对象变量通过超出范围释放其引用时,运行时调用目标对象的方法以减少对象的引用计数
Option Explicit
Public Sub KbossBrokerageProcessStatus()
Dim browser As Object, t As Date, ele As Object, testValue As String
Const MAX_WAIT_SEC As Long = 5
Set browser = CreateObject("InternetExplorer.Application")
With browser
.Visible = True
.navigate2 "myUrl"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
.getElementById("ctl00_ContentPlaceHolder1_btnGenerate").Click '.FireEvent("onclick")
While browser.Busy Or browser.readyState < 4: DoEvents: Wend
Do
DoEvents
On Error Resume Next
Set ele = .getElementById("ctl00_ContentPlaceHolder1_lblMsg")
testValue = ele.innerText
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While testValue <> "Report Spooled Successfully"
If ele Is Nothing Or testValue <> "Report Spooled Successfully" Then Exit Sub
.document.getElementById("ctl00_ContentPlaceHolder1_lnkDownload").Click
While browser.Busy Or browser.readyState < 4: DoEvents: Wend
End With
.Quit
End With
End Sub
选项显式
公共子KbossBrokerageProcessStatus()
Dim browser作为对象,t作为日期,ele作为对象,testValue作为字符串
常量最大等待时间=5秒
设置browser=CreateObject(“InternetExplorer.Application”)
带浏览器
.Visible=True
.navigate2“myUrl”
当.Busy或.readyState<4:DoEvents:Wend时
随附.文件
.getElementById(“ctl00\u内容占位符1\u btnGenerate”)。单击“.FireEvent(“onclick”)
browser.Busy或browser.readyState<4:DoEvents:Wend时
做
多芬特
出错时继续下一步
Set ele=.getElementById(“ctl00\u contentplaceholder 1\u lblMsg”)
testValue=ele.innerText
错误转到0
如果定时器-t>最大等待时间,则退出Do
在testValue“报告假脱机成功”时循环
如果ele为Nothing或testValue“报告假脱机成功”,则退出Sub
.document.getElementById(“ctl00\u内容占位符1\u lnkDownload”)。单击
browser.Busy或browser.readyState<4:DoEvents:Wend时
以
退出
以
端接头
单击“生成”按钮的代码在哪里?据我所知,在有时间限制的循环中单击“生成”后,您必须等待ctl00\u contentplaceholder 1\u lnkDownload
出现,然后只单击它。什么是运气不好?你不需要一个循环,因为每个元素都有一个id。嗨,我不确定你怎么会在那一行出现这个错误。如果ele为Nothing,则可以分成两行,然后退出Sub:如果testValue“Report Spooled Successfully”,则退出Sub。。。。。。告诉我错误是否发生在这些行的第一行?嗨,QHarr,我已经按照您在前面的评论中提到的那样进行了编辑,没有出现任何错误,但单击下载按钮不会发生。。Browser.document.getElementById(“ctl00_contentplaceholder 1_lnkDownload”)。ClicktestValue=ele.innerText为空@Devendra,我可以看到您已删除了以前的注释。我用QHarr建议的代码做了一个测试,效果很好。我建议您再次进行测试,并对测试结果进行评论。它可以帮助我们了解您的问题的当前状态。