【问题标题】:This document requires 'TrustedScriptURL' assignment in Google Sheets此文档需要在 Google 表格中分配“TrustedScriptURL”
【发布时间】:2022-08-20 04:52:23
【问题描述】:

我有一个 Google 电子表格,其中包含有关工作表中特定单元格的以下信息:

  • 细胞B1: 有网址http://www.google.com.co/search?q=NASA+watching+now%3A+site%3Awww.youtube.com
  • 细胞B2: 有以下公式:=IMPORTXML(B1,\"//title\")

这是link of the Google spreadsheet - 如果你想从你身边测试。

这是Google Spreadsheet I\'m working on - 我想获取具体数据:

  1. 标题:文本(在里面h3结果项的 HTML 标记)。
  2. 网址:链接(在里面<a>结果项的 HTML 标记)
  3. 说明:结果项缩略图旁边的文本。

    查看包含要使用的数据的屏幕截图IMPORTXML

    前面的代码返回title给定 URL - 在这种情况下,存储在B1细胞。

    它工作没有问题(自 2022 年 12 月 2 日 - 日/月/年) 直到今天 (13/02/2022 - 日/月/年)。

    我检查了 Chrome 控制台“F12 开发者工具”,我得到了这个错误:

    此文档需要 \'TrustedScript\' 分配。

    注入内容窗口@ VM364:27

    通过单击@VM364:27 行,将显示以下代码:

      function injectIntoContentWindow(contentWindow)
      {
        if (contentWindow && !injectedFramesHas(contentWindow))
        {
          injectedFramesAdd(contentWindow);
          try
          {
            contentWindow[eventName] = checkRequest;
            contentWindow.eval( /* ERROR with and (X) is shown here. */
              \"(\" + injectedToString() + \")(\'\" + eventName + \"\', true);\"
            );
            delete contentWindow[eventName];
          }
          catch (e) {}
        }
      }
    

    在互联网上搜索,我几乎无法得到这个错误的原因:

    • Google Chrome 更新 - 使安全更加严格。
    • Chrome 扩展 - 尝试禁用此类扩展并重试。
    • CPS (内容安全策略) - 必须诚实 = 我不明白这一点;它是从网站上抓取数据还是从 Google 表格中获取 CPS 是根本原因?
    • 解决方案这个问题在 Python 中 - 使用 DOMPurify - 就像described in this answer 一样,但是,我不知道,也没有在谷歌电子表格中找到关于这个问题及其解决方案的任何线索。

    我试过了:

    • 恢复以前工作的 Google 电子表格版本 - 结果是公式重新计算并且没有返回结果;查看控制台,This document requires \'TrustedScriptURL\' assignment 消息显示。
    • Disable Google Chrome installed extensions - 我只有 AdBlock (这段代码工作没有问题),无论如何,我关闭,重新加载电子表格,上面提到的错误在控制台中出现。
    • 使用另一个页面 - 我尝试使用 Wikipedia 和 Wiki.fandom 并且它有效 - 即返回数据。可能在这种情况下,谷歌在他们的搜索器中注入了一个避免注入的脚本? - 我真的不确定,这里只是猜测/漫谈。

    我考虑的另一个可能原因是我的 IP 被列入黑名单或被阻止,但我不确定。

    我的浏览器信息:

    • Chrome 版本:98.0.4758.82(官方构建)(64 位)(队列:稳定)
    • Windows 10 版本 21H2(内部版本 19044.1466)

    有什么办法可以解决 Google 表格中的这个错误吗?

    PS:我有兴趣知道使用谷歌表格和/或自定义脚本的解决方法 - 通过脚本编辑器/应用脚本. IMPORTXML 函数的使用不是强制性的——我很好奇它正在工作,然后今天,不再是了。

  • 你只想要第一个标题还是全部?
  • @player0 页面的标题,但是,最后想要的结果是: (1) 获取 \"h3\" 标签中的文本 = 这些是搜索结果中每个元素的标题。 (2) 获取 \"a\" 标记中的 URL,(3) \"optional\" 获取结果项旁边的文本。
  • @player0 这里是 google sheet I\'ve created,它可以工作 - 即检索搜索结果的标题和 URL。请让我知道您打开此文件时看到的内容。

标签: google-sheets content-security-policy


【解决方案1】:

我将把它留在这里:

=INDEX(UNIQUE(REGEXREPLACE(QUERY(IMPORTXML(A1, "//a/@href"), 
 "where Col1 contains 'youtube.com/'"), "\/url\?q=|&sa=.*", )))

=IMPORTXML(A1, "//title")

=IMPORTXML(A1, "//h3")

【讨论】:

  • 您是立即得到结果还是必须等到结果显示在工作表中? - 我这么说是因为see image I just get 在等待了将近一小时后:| - 昨天,我几乎瞬间就得到了结果。
  • @MarcoAurelioFernandezReyes 我马上就明白了
  • 嗯……有趣。也许可以与我的 IP 有关 - 可能会被限制为不能立即获得结果? - 不过,这对我来说很奇怪。您发布的INDEX(UNIQUE(REGEXREPLACE([...] 看起来非常好 - 我会仔细检查以获取结果描述。感谢您对这个问题的帮助,并且(如果你不介意),我将感谢您为获取描述所做的努力——一旦我能够获得 URL——正如我在屏幕截图中显示的那样,我无法获得最后的数据。
【解决方案2】:

TL;博士:This document requires 'TrustedScript' assignment 错误不是 IMPORTXML 函数延迟的根本原因 - 可能还有其他原因(在开发商的处理之外),但是,毕竟,代码有效 - see working google spreadsheet - 只是,等到结果显示或使用另一种方式来网络抓取所需的数据。


由于This document requires 'TrustedScript' assignment 消息仍然出现在浏览器的控制台中,但是,我在我的问题上发布的代码(以及SO user player0 in their answer发布的代码) 有效,在我看来,使用IMPORTXML 的响应延迟可能是由于它的错误功能和/或谷歌通过执行多个请求检测到的一些限制。

所以,这里是我的提示:

  • 非常仔细地检查将如何从中提取数据的页面及其结构做过多的请求 - 或者你可能会面临IMPORTXML 函数的响应显着延迟 - 正如我所经历的那样。
  • 更加熟悉 XPath 并检查数据是否在页面中动态生成 - 这使得使用这种报废方式获取所需数据变得更加困难。

This is the spreadsheet with the desired results - 如果有人感兴趣1.

1检查“结果组合”表(其中包含我设法创建的代码和 player0 在他们的答案中提供的代码)。

如果您真的想以不那么复杂的方式获得类似的结果,请考虑使用另一种网络抓取策略或使用官方 API(如果可用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多