在上一个 <td> 之后获取 <td> 的内部 HTML
Getting inner HTML of a <td> after previous <td>
所以,我在可能对用户最不友好的 CRM 中工作,我想通过 iMacros 让我的生活更轻松一些。
然而,事情太复杂了,我不能做一个简单的任务来轻松获得一些价值。
页面上的内容如下所示:
<td id="_t5141276" class="Label">Number:</td>
<td id="_t5141277" class="Value">1234567890</td>
我需要获取 "Value" class 的 innerhtml,但是:
1) 页面上有一堆值
2) 每页随机生成ID。
我发现我可以在第一个 td 中查找 "Number:" 文本,然后在那个之后获取 td 的 innerhtml,但我该怎么做?
我希望它位于 javascript 或其他我可以轻松集成到 iMacros 中的东西。
我假设您不能以任何方式更改标记,因为您的问题中似乎暗示了这一点。
您可以从 querySelectorAll
获取按文档顺序排列的所有 td
元素的列表。当你找到其中有 Number:
的那个时,就使用下一个:
var list = document.querySelectorAll("td"); // See note below
var index;
var value;
for (index = 0; index < list.length - 1; ++index) {
if (list[index].innerHTML === "Number:") {
value = list[index + 1].innerHTML;
break;
}
}
请注意,我已经考虑到 Number:
项可能是最后一项(因此我们想要的下一项可能会丢失),方法是在最后一项中停止一项。
注意:以上是以正常方式在网页中进行的。要在 iMacros 中执行此操作,显然您必须将 window.content
添加到 document.querySelectorAll
之前,因此第一行将是:
var list = window.content.document.querySelectorAll("td");
// ^^^^^^^^^^^^^^^------- added for iMacros
首先,您可以获取所有 td
元素并检查 td
的 innerHTML
并与您的 "Number:" 匹配。如果它被加工,则获取下一个 td 值。
代码将是这样的:
var value = 0;
var tds = document.getElementsByTagName("td");
for (var i=0; i< tds.length; i++)
{
var currentTd = tds[i];
var value = currentTd.innerHTML.trim() // trim will remove extra spaces
if(value === "Number:")
{
value = tds[i+1].innerHTML;
break;
}
}
感谢您的回答。我不能给他们投票,因为我没有足够的代表,但所有建议都有效(包括经过一些调整后为 iMacros 删除的建议)。
非JavaScript选项
Adobe CQ5 也喜欢随机生成 ID。
我通常做的是在 chrome 中打开有问题的页面,检查我要隔离的元素,然后在检查工具中删除 "ID" 的值,直到我删除了所有动态生成的元素,这些元素是相关元素的父元素。
完成后,再次检查您的元素(您要避免刷新和删除您所有的辛勤工作!)并右键单击 html 元素以复制 XPATH。
这需要反复试验,并且经常需要我多次复制 XPATH 才能找到偷偷摸摸的 ID。
在 iMacros 中,使用
TAG XPATH="[your XPATH goes here]" EXTRACT=TXT
TAG XPATH="[your XPATH goes here]" CONTENT=whatever
随心所欲
所以,我在可能对用户最不友好的 CRM 中工作,我想通过 iMacros 让我的生活更轻松一些。
然而,事情太复杂了,我不能做一个简单的任务来轻松获得一些价值。
页面上的内容如下所示:
<td id="_t5141276" class="Label">Number:</td>
<td id="_t5141277" class="Value">1234567890</td>
我需要获取 "Value" class 的 innerhtml,但是:
1) 页面上有一堆值
2) 每页随机生成ID。
我发现我可以在第一个 td 中查找 "Number:" 文本,然后在那个之后获取 td 的 innerhtml,但我该怎么做?
我希望它位于 javascript 或其他我可以轻松集成到 iMacros 中的东西。
我假设您不能以任何方式更改标记,因为您的问题中似乎暗示了这一点。
您可以从 querySelectorAll
获取按文档顺序排列的所有 td
元素的列表。当你找到其中有 Number:
的那个时,就使用下一个:
var list = document.querySelectorAll("td"); // See note below
var index;
var value;
for (index = 0; index < list.length - 1; ++index) {
if (list[index].innerHTML === "Number:") {
value = list[index + 1].innerHTML;
break;
}
}
请注意,我已经考虑到 Number:
项可能是最后一项(因此我们想要的下一项可能会丢失),方法是在最后一项中停止一项。
注意:以上是以正常方式在网页中进行的。要在 iMacros 中执行此操作,显然您必须将 window.content
添加到 document.querySelectorAll
之前,因此第一行将是:
var list = window.content.document.querySelectorAll("td");
// ^^^^^^^^^^^^^^^------- added for iMacros
首先,您可以获取所有 td
元素并检查 td
的 innerHTML
并与您的 "Number:" 匹配。如果它被加工,则获取下一个 td 值。
代码将是这样的:
var value = 0;
var tds = document.getElementsByTagName("td");
for (var i=0; i< tds.length; i++)
{
var currentTd = tds[i];
var value = currentTd.innerHTML.trim() // trim will remove extra spaces
if(value === "Number:")
{
value = tds[i+1].innerHTML;
break;
}
}
感谢您的回答。我不能给他们投票,因为我没有足够的代表,但所有建议都有效(包括经过一些调整后为 iMacros 删除的建议)。
非JavaScript选项
Adobe CQ5 也喜欢随机生成 ID。
我通常做的是在 chrome 中打开有问题的页面,检查我要隔离的元素,然后在检查工具中删除 "ID" 的值,直到我删除了所有动态生成的元素,这些元素是相关元素的父元素。
完成后,再次检查您的元素(您要避免刷新和删除您所有的辛勤工作!)并右键单击 html 元素以复制 XPATH。
这需要反复试验,并且经常需要我多次复制 XPATH 才能找到偷偷摸摸的 ID。
在 iMacros 中,使用
TAG XPATH="[your XPATH goes here]" EXTRACT=TXT
TAG XPATH="[your XPATH goes here]" CONTENT=whatever
随心所欲