【问题标题】:How to create a document fragment in Google Apps Script? [duplicate]如何在 Google Apps 脚本中创建文档片段? [复制]
【发布时间】:2022-01-01 15:00:23
【问题描述】:

我正在使用 Google 应用脚本在 Google 表格中创建一个应用。该应用程序抓取网页并将 HTML 页面作为字符串返回给我。我正在尝试将其插入 DOM,以便我可以使用 DOM 查询在页面中查找我需要的数据。通常,您可以使用document.createDocumentFragment() 创建一个文档片段,或者使用document.createElement() 创建一个分离的元素,然后使用HTML 字符串设置innerHTML。问题是,GAS 没有 document 上下文。

有没有人有解决方法的想法,或者可能有其他方法来查询大文本字符串?

附言我的第一直觉是找到我需要的 API 作为数据,但我找不到任何满足我需求的东西。屏幕抓取是我最后的手段。

更新:感谢您发现并标记了类似问题。 GS 的 Cheerio 库是正确的解决方案。 https://stackoverflow.com/a/61928025/735374

【问题讨论】:

  • Google 应用程序脚本在服务器上而不是在浏览器上运行,因此没有 DOM。只要您的 html 没有格式错误,您就可以尝试使用 XMLService。当然,我不知道您要完成什么,但如果我想使用 DOM 查询来查找我更喜欢使用 sn-ps 并捕获数组中的数据并存储在 localStorage 中的东西。我可以轻松地将数据以标准的 javascript 格式取出,然后以 JSON 或 javascript 易于读取的格式粘贴到文件中。
  • 你能解释一下当你说“我试图将它插入到 DOM 中”时你的意思吗?什么 DOM?你在创建HtmlService object吗?
  • 感谢@Cooper 的建议。我需要在 GAS 中执行此操作,因为屏幕抓取只是一个更大的应用程序的一部分,所有这些都以编程方式完成。片段仅作为小规模的手动运行代码有用。
  • 嗨@Ihopethisishelpfultoyou,我希望创建一个分离的DOM,然后我可以使用querySelector等方法来导航HTML文档。我知道这是服务器端 JS,这基本上就是问题所在 - 如果有一种方法可以创建一个不存在的 DOM。
  • 为什么不只使用 importxml 和 xpath ?

标签: javascript google-apps-script google-sheets dom


【解决方案1】:

您不能在 Google Apps 脚本中创建 DOM,至少不能在服务器端代码中。

为了查询 HTML 字符串,您需要确切地知道您需要的数据在页面中的哪个位置,其中包含可识别的子字符串,例如包含元素 ID - 但通常会生成这些数据,因此无法知道。 HTML 也是famously unable to be parsed by RegEx

如果不需要让脚本在无人值守的情况下运行,您可以将其作为表格插件执行此操作。在这种情况下,工作流程将遵循:

  • 将 HTML 数据抓取为字符串
  • 使用createHtmlOutput(html) 方法创建一个HTMLOutput 对象
  • dialog or sidebar 的形式打开 HTML 并在对话框中调用 querySelector。 (在这种情况下,您必须将这些作为代码添加到在加载页面时运行的 <script> 标记中
  • 使用 google.script.run 将值返回给 Google Apps 脚本

【讨论】:

  • 考虑移动这个答案here
  • 谢谢,我最终使用了蛮力正则表达式,它恰好适用于我的具体情况,但这些都是很好的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多