如何通过用户脚本获取HTML表格内容?

8 浏览
0 Comments

如何通过用户脚本获取HTML表格内容?

我正在创建一个Greasemonkey脚本,用于从一个基于文本的游戏中读取和存储信息到数据库中,以便将来使用。

我想要的是能够读取用户的统计数据,并将这些数据转换成变量,以便我可以进一步利用这些信息。

以下是我想要从中获取统计信息的表格的源代码:

之后,获取第一个td的值”的方法,并将其作为一个变量保存?

注意:我需要的变量是攻击行动、防御行动、间谍评级和哨兵评级。

0
0 Comments

问题的出现原因是用户需要通过用户脚本(userscript)获取HTML表格的内容,但是无法给表格赋予ID,因为这不是用户自己的网页,而是GreaseMonkey正在运行的页面。

解决方法是使用XPath来定位表格的内容。可以编写一个函数getElement,通过XPath来获取表格的行。该函数使用了document.evaluate方法来执行XPath查询,返回结果中的第一个节点。然后可以将返回的节点集合作为一个数组来处理。

下面是示例代码:

function getElement(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
var rows = getElement("//html[1]/body[1]/table[='table_lines']/tr");

这段代码会返回所有表格行的数组。

以上就是问题的出现原因以及解决方法的整理。

0
0 Comments

如何通过用户脚本获取HTML表格内容?

问题的出现原因:

- 使用jQuery可以更轻松地解析表格。

- 由于需要评分,不要忘记将数字解析为JavaScript整数。

- 如果页面是基于AJAX的,请使用AJAX感知技术。

解决方法:

下面是一个完整的Greasemonkey/Tampermonkey脚本,展示了如何完成所有这些操作:

// ==UserScript==
//      _Parse table information that has low information scent.
//   http://YOUR_SERVER.COM/YOUR_PATH/*
//   http://bilalrammal.ca/clicker/tester.html
//   http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
//   https://gist.github.com/raw/2625891/waitForKeyElements.js
//     GM_addStyle
// ==/UserScript==
/*- The  directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
waitForKeyElements (".table_lines", parseMilitaryEffectivenessTable);
function parseMilitaryEffectivenessTable (jNode) {
    //--- Note that :contains() is case-sensitive.
    var strikeAction    = jNode.find ("tr:contains('Strike Action') td:eq(1)").text ();
    var defensiveAction = jNode.find ("tr:contains('Defensive Action') td:eq(1)").text ();
    var spyRating       = jNode.find ("tr:contains('Spy Rating') td:eq(1)").text ();
    var sentryRating    = jNode.find ("tr:contains('Sentry Rating') td:eq(1)").text ();
    //--- Convert strings to integers...
    strikeAction        = parseInt (strikeAction   .replace (/\D/g, ""), 10);
    defensiveAction     = parseInt (defensiveAction.replace (/\D/g, ""), 10);
    spyRating           = parseInt (spyRating      .replace (/\D/g, ""), 10);
    sentryRating        = parseInt (sentryRating   .replace (/\D/g, ""), 10);
    //--- Show on console:
    console.log ("strikeAction: ",       strikeAction);
    console.log ("defensiveAction: ",    defensiveAction);
    console.log ("spyRating: ",          spyRating);
    console.log ("sentryRating: ",       sentryRating);
}

最后一个问题是,如何使其仅定位“军事效能”值为“Strike Action”的td的父级。由于页面上可能还会有其他说“strike action”的内容。

解决方法:

如果有多个具有class为`table_lines`的表格,并且它们都不是“Military Effectiveness”,则调整`waitForKeyElements()`中使用的选择器。例如:`".table_lines:contains('Military Effectiveness')"`是一种方式。如果是其他内容,请提出新的问题。

0
0 Comments

问题的出现原因是用户想要通过用户脚本来获取HTML表格的内容,但是现有的代码只能修改表格的内容,无法读取表格。

解决方法是使用JavaScript的方法来获取HTML表格的内容。以下是一种可能的解决方案:

// 获取表格元素
var table = document.getElementsByTagName("table")[0];
// 获取表格的所有行
var rows = table.getElementsByTagName("tr");
// 遍历每一行
for (var i = 0; i < rows.length; i++) {
  // 获取当前行的所有单元格
  var cells = rows[i].getElementsByTagName("td");
  // 遍历每个单元格
  for (var j = 0; j < cells.length; j++) {
    // 输出单元格的内容
    console.log(cells[j].innerHTML);
  }
}

0
军事效果
攻击行动 16,376,469,657 排名第443
防御行动 4,016,716,436 排名第569
间谍评级 12,245,896 排名第1,204
哨兵评级 5,291,630,090 排名第831

现在你可以看到这些统计数据没有标识的类ID或其他信息,所以我不确定该如何处理。我只会使用PHP,所以JavaScript对我来说很陌生,但它似乎和PHP相似。

也许可以使用一些类似于“在

攻击行动 标签中断词。