我试图刮一个网站,有很多元素,我正在处理。我需要等待元素加载。
这是我到现在为止的尝试,但我等待了很长时间,有时我会出错。
.FindElementById("ContentPlaceHolder1_Button1").Click
.Wait 2000
GoBack1:
Set elePrint = .FindElementById("IconImg_CrystalReportViewer1_toptoolbar_print", timeout:=20000, Raise:=False)
If elePrint Is Nothing Then
Application.Wait Now() + TimeValue("00:00:01"): GoTo GoBack1
Else
elePrint.Click
End If
GoBack2:
Set eleExport = .FindElementById("theBttnbobjid_1545642213647_dialog_submitBtn", timeout:=20000, Raise:=False)
If eleExport Is Nothing Then
Application.Wait Now() + TimeValue("00:00:01"): GoTo GoBack2
Else
eleExport.Click
End If
有没有更好的方法来做到这一点?
这是html部分
<tbody><tr valign="middle"><td height="21" width="5" style="background-image:url('aspnet_client/system_web/4_0_30319/crystalreportviewers13/js/crviewer/../dhtmllib/images/skin_standard/button.gif');background-position:0px 0px;"></td><td id="theBttnCenterImgbobjid_1545656314367_dialog_submitBtn" align="center" class="wizbutton" style="padding-left:3px;padding-right:3px;background-image:url('aspnet_client/system_web/4_0_30319/crystalreportviewers13/js/crviewer/../dhtmllib/images/skin_standard/button.gif');background-position:0px -42px;"><nobr><a id="theBttnbobjid_1545656314367_dialog_submitBtn" href="javascript:void(0)" class="wizbutton" role="button">Export</a></nobr></td><td height="21" width="5" style="background-image:url('aspnet_client/system_web/4_0_30319/crystalreportviewers13/js/crviewer/../dhtmllib/images/skin_standard/button.gif');background-position:0px -21px;"></td></tr></tbody>
3条答案
按热度按时间i7uq4tfw1#
您可以尝试循环元素,直到它们变得可用。
我也会考虑添加一个计时器到你的循环,如果由于某种原因网页挂起-如果是这种情况,你可以重新加载网页或执行一些其他的错误处理操作。
bxjv4tth2#
你可以把它缩短为
不过你应该设置一个超时时间
不会出现错误,也不需要产量控制。如果没有找到该项目,
.Count
将为零。如果id是动态的,并且你有一个常量子字符串(这只在页面上的一个id属性中出现(为了安全起见-可能不是必需的),你可以在css中使用^,*,$运算符)。
如果出现多次,并且索引在页面之间是恒定的,则稍后使用索引进行交互,例如:
uqdfh47h3#
或缩短方式: