如何在JavaScript中应用Xpath表达式

  • Post author:
  • Post published:2024年 5月 28日
  • Post last modified:2024年 5月 28日
  • Reading time:1 mins read

问题提出

我正在使用老师的账号在网页上实施特定操作:输入检索条件、将检索结果的部分片段复制粘贴到Excel文档当中。由于是老师的账号,所以我不太敢写爬虫脚本,以免带来不必要的风险。但纯机械式操作又比较费劲,所以我弄了一个半机械式操作,具体思路为:首先仍是手工输入检索条件,回车获取检索结果;然后使用JavaScript从检索结果中抽取出特定的字符串片段,并将其置入系统剪贴板当中;最后在表格文件里面粘贴结果。

解决方案

根据ChatGPT提供的解决方案,我们第一步要实施的操作是从文档中抽取特定字符串:

// Define the XPath expression
const xpathExpression = "//a/text()";

// Evaluate the XPath expression
const result = document.evaluate(xpathExpression, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

// Iterate through the results and log the text content
for (let i = 0; i < result.snapshotLength; i++) {
    console.log(result.snapshotItem(i).textContent);
}

第二步要实施的操作是针对原始字符串实施特定的操作,获取最终要贴进Excel表格当中的字符串:

// get the last part after the space
content.split(" ").pop()

第三步操作就是将检索结果放到系统剪贴板了,这个在之前的经验贴里面也提到过,具体如下:

copy(content)

当然了,由于我的工作是特定的,所以我具体用到的代码是如下这样的一行:

copy(document.evaluate("//a[contains(@onclick, 'rp_entity_id')]/text()", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).textContent.split(" ").pop())

这是在WRDS的RavenPack数据库中,根据企业的ISIN号获取其在RavenPack数据库当中唯一标识符RP_ENTITY_ID的代码。我需要实现的功能是在第一条检索结果(snapshotItem(0)):’rp_entity_id: WZXP28’中获取空格以后的所有内容。