如何从对象<div class =“gwt-Label”>某些数据</div>中提取数组数据?

时间:2017-12-26 06:20:48

标签: javascript greasemonkey tampermonkey

如何从对象中提取数组数据&lt; div class =“gwt-Label”&gt;某些数据&lt; / div&gt;?

由于@BrockAdams为从DIV对象提取数据的一般问题提供了一个很好的答案和解决方案,仅由类名(无id)描述,并且因为网页由100多个DIV对象组成,由相同的对象描述类名,主要是“gwt-Label”

How do I extract the text from a (dynamic) div, by class name, using a userscript?

我正在寻找一种解决方案,通过下面的@BrockAdams修改代码,将输出限制在100多行到几个

waitForKeyElements (".gwt-Label", printNodeText);

function printNodeText (jNode) {
    console.log("gwt-Label value: ", jNode.text().trim());
}

由于我在控制台中读取的输出长度超过100行,但我只需要按照数组索引选择一些行。

您是否知道如何操作jNode以首先将输出保存到数组并且只重新读取所选的数组元素并将其发送到控制台?

我更喜欢这样的伪代码:

jNode.text().trim()[0]
jNode.text().trim()[5]

在Greasemonkey或Tampermonkey中作为脚本运行。

而且,我需要将脚本循环到数字查询字符串中,在脚本中设置动态@match URL。

2 个答案:

答案 0 :(得分:1)

好的,如果你有很多类gwt-Label元素,并且假设它们是在不同的批次中进行AJAX,你可以将它们放入一个包含如下代码的数组中:

var valArry     = [];
var ajxFinshTmr = 0;

waitForKeyElements (".gwt-Label", storeValue);

function storeValue (jNode) {
    valArry.push (jNode.text ().trim () );
    if (ajxFinshTmr)  clearTimeout (ajxFinshTmr);

    //-- Let all initial AJAX finish, so we know array is complete.
    ajxFinshTmr = setTimeout (printFinalArray, 200);
}

function printFinalArray () {
    console.log ("The final values are: ", valArry);
}

请注意,几乎可以肯定有更强大/更有效/更明智的选择,但我们需要看到更多真实的页面,以及设计这些页面的真正目标。

ETA:我看到你刚刚链接到该网站。现在详细描述您想要做什么。可能性非常混乱。

答案 1 :(得分:-4)

我花了几天时间来理解这个问题

// ==UserScript==
// @name        Important test1
// @namespace   bbb

// @include     http://srv1.yogh.io/#mine:height:0

// @version     1

// ==/UserScript==
console.log("sdfasg");

window.setTimeout(function() {
  
  var HTMLCollection = document.getElementsByClassName("gwt-Label");
console.log(HTMLCollection);
var elements = HTMLCollection.length;
console.log(elements);
  element = HTMLCollection[6];
  console.log(element);
  text = element.innerHTML;
  console.log(text);
  textclass= text.innerHTML;
 // console.log(textclass);

console.log("15minutes");
}, 15000);


  
 var HTMLCollection = document.getElementsByClassName();
console.log(HTMLCollection);

@BrockAdams非常有帮助。 由于上面的网站随机加载,所以GM脚本一天工作正常,完全生成HTMLCollection但另一次生成它为空,使innerHTML生成未定义的值。 “353更多......”HTMLCollection链接到Open In Variables View,取得了巨大成功,生成了我试图通过XPath完成的工作,生成了我的HTMLCollection中所有DIV对象的索引(计数)列表,让我选择感兴趣的DIV对象按已知号码。

我仍在寻找DOM解析和序列化提供的类似解决方案

  [https://w3c.github.io/DOM-Parsing/#][1] 

为我工作,为HTML文档的每个DOM对象附加自然数,索引,让我与Firebug生成的XPath并行使用它

例如

html/body/div[3]/div[3]/div/div[6]/div[2]/div/div/div

接着是

html1/body2/div[3]5or-higher/div[3]/div/div[6]/div[2]/div/div/div

只是序列化HTML DOM对象,为每个对象附加唯一索引,让我通过HTMLCollection [index]或更好的HTMLDOMCollection [index]

调用它

我确信这种方法已被HTML DOM序列化器解析器所知并采用,但我不知道如何访问它。

谢谢大家