html - 使用带有 selenium 的 vba 如何获取表格中的特定单元格然后单击它
问题描述
我正在尝试访问网页上的表格,并在表格中尝试单击该单元格。
我试图到达的单元格有一个 td id="flowTile_6"。在下面突出显示它。
我尝试了各种方法
如
ch.FindElementByXPath("//table[@id="mainFlow"]/tbody/tr[7]/td[15]").Click
这将出错。
并试图循环遍历每个人以达到它,但我没有成功。
Option Explicit
Private ch As Selenium.ChromeDriver
Sub test()
Dim FindBy As New Selenium.By
Dim ResultSections As Selenium.WebElements
Dim ResultSection As Selenium.WebElement
Dim TableByTag As Selenium.WebElement
Dim tr, c, r, td, li, cc, t
Set ch = New Selenium.ChromeDriver
ch.Start baseUrl:=""
ch.Get "/"
' ch.FindElementById("flowTile_6").Click
'Set TableByTag = ch.FindElementByTag("table")
'ch.FindElementByXPath("//table[@id="mainFlow"/tbody/tr[7]/td[15]").Click
For Each li In ch.FindElementById("mainFlow")
cc = 1
For Each t In li.FindElementsByTag("li")
ch.FindElementById("flowTile_6").Click
cc = cc + 1
Next t
Next li
End Sub
html
<div class="background">
<div class="holder">
<table class="flow" id="mainFlow" style="display: table;">
<tbody>
<tr class="collapsible" id="flowHeader1_text" isasection="true" onclick="doExpandCollapse(this)">
►<td colspan="25">...</td>
</tr>
<tr id="flowHeader1_underline">
<td colspan="25">
<div class="flowHeaderUnderline"></div>
</td>
</tr>
<tr id="flowHeader1_placeholder" class="sectionAnimationPlaceHolder">
<td colspan="25"></td>
</tr>
<tr id="row1">...</tr> == $0
<tr id="row2" class="narrowSpacer">...</tr>
►<tr id="row3" class="narrowSpacer">...</tr>
<<tr id="row4">
<td class="a Em"X/td>
<td class="b Em"x/td>
<td class="a Em"></td>
<td class="d Em"x/td>
►<td id="flowTile_4" class="e item enabled hasIcon" role="link" aria-labelledby="tileDescription_4" havebox="true" formid="" tiletext="Supply/Demand Inquiry" appid="" version="" onclick
script:runApp (', '', '')" onmouseover="javascrpt: startHoverTimer(this);" onmouseout="javascript:startTimerToMaybe End HoverMode (this);">...</td>
<td class="a Em"X</td>
<td class="b Em"X/td>
<td class="a Em"X/td>
<td class="d Em"x/td>
►<td id="flowTile_5" class="e item enabled hasIcon" role="link" aria-labelledby="tileDescription_5" havebox="true" formid="" tiletext="Item Availability" appid="" version="" onclick="
ript:runpp('', '', '')" onmouseover="javascrpt:startHoverTimer(this);" onmouseout="javascript:startTimerToMaybe EndHoverMode(this);">.</td>
<td class="a Em"X/td>
<td class="b Em"></td>
<td class="a Em">/td>
<td class="d Em"X/td>
**<<td id="flowTile_6" class="e item enabled hasIcon" role="link" aria-labelledby="tileDescription_6" havebox="true" formid="W41016" tiletext="Item Master Inquiry" appid="" version="" onclick="
ript:runApp('', '','')" onmouseover="javascrpt:startHoverTimer(this);" onmouseout="javascript:startTimerToMaybeEndHoverMode (this);">
<div class="relativeWrapper">
<img id="flowTileIconImg_6" size="medium" src="/ide/share/images/ideicons/supply chain mntn medium.png" autoreplace="true">**
<div>
<div class="wlTileDesciption" id="tileDescription_6">Item Master Inquiry</div> == $0
</div>
</div>
</td>
<td class="a Em"X/td>
<td class="b Em"></td>
<td class="a Em"X/td>
<td class="d Em"x/td>
><td id="flowTile_7" class="e item enabled hasIcon" role="link" aria-labelledby="tileDescription_7" havebox="true" formid="W302016" tiletext="Single Level Where Used" appid="" version="" onclick=
"javascript:runpp ("', '', ')" onmouseover="javascrpt:startHoverTimer(this);" onmouseout="javascript:startTimerToMaybe EndHoverMode(this);">.</td>
<td class="a Em"x/td>
<td class="b Em"></td>
<td class="a Em"x/td>
<td class="d Em"X/td>
<td class="e Em"X/td>
</tr>
><tr id="rows" class="narrowSpacer">...</tr>
><tr id="row6" class="narrowSpacer">.</tr>
</tbody>
</table
</div>
远。
这就是我想在表格中得到的
<<td id="flowTile_6" class="e item enabled hasIcon" role="link" aria-labelledby="tileDescription_6" havebox="true" formid="W41016" tiletext="Item Master Inquiry" appid="" version="" onclick="
ript:runpp('', '','')" onmouseover="javascrpt:startHoverTimer(this);" onmouseout="javascript:startTimerToMaybeEndHoverMode (this);">
<div class="relativeWrapper">
<img id="flowTileIconImg_6" size="medium" src="/ide/share/images/ideicons/supply chain mntn medium.png" autoreplace="true">
解决方案
它嵌套在两个 iframe 中。
能够通过以下方式解决:
With ch
.SwitchToFrame .FindElementById("e1menuAppIframe", timeout:=10000)
.SwitchToFrame .FindElementById("wcFrame0", timeout:=10000)
Set ResultSections = .FindElementsByClass("flow")
For Each ResultSection In ResultSections
.FindElementById("flowTile_6").Click
Next ResultSection
End With
推荐阅读
- android - 有没有办法检测Android上的拨出电话是否以编程方式被回答或拒绝?
- laravel - 如何使用 Laravel 显示从其他用户收到的消息
- sonarqube - 一段时间后 sonarQube 异常关闭
- laravel - 无法将我的 laravel 应用程序与 facebook 身份验证连接起来
- android - 此方法仅在托管模式下可用 错误按排序
- python - 如何将图像文件加载到 Django File 对象中,然后保存到我的模型的 FileField
- c++11 - C++ 标准不提供这种类型的散列。
- dropbox - 如果第一次登录 Dropbox 失败,则获取脚本错误(recaptcha)
- vue.js - 你如何对 vue.js 的顶级 .js 进行单元测试?
- asp.net-core - VS2017社区版的Asp.net核心编译问题