如何使用 XMLHttpRequest 在后台下载 HTML 页面并从中提取文本元素?

2024-02-08

我想制作一个 Greasemonkey 脚本,当您在 URL_1 中时,该脚本会在后台解析 URL_2 的整个 HTML 网页,以便从中提取文本元素。

具体来说,我想下载整个页面的 HTML 代码(a烂番茄page)在后台并将其存储在变量中,然后使用getElementsByClassName[0]为了从类名“critic_consensus”的元素中提取我想要的文本。


我在 MDN 中找到了这个:XMLHttpRequest 中的 HTML https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/HTML_in_XMLHttpRequest所以,我最终得到了这个不幸的不起作用的代码:

var xhr = new XMLHttpRequest();
xhr.onload = function() {
  alert(this.responseXML.getElementsByClassName(critic_consensus)[0].innerHTML);
}
xhr.open("GET", "http://www.rottentomatoes.com/m/godfather/",true);
xhr.responseType = "document";
xhr.send();

当我在 Firefox Scratchpad 中运行它时,它显示此错误消息:

跨源请求被阻止:同源策略不允许读取 远程资源位于http://www.rottentomatoes.com/m/godfather/ http://www.rottentomatoes.com/m/godfather/。 这可以通过将资源移动到同一域或 启用 CORS。


附言。我不使用烂番茄 API 的原因是他们已经删除了批评家的共识 http://developer.rottentomatoes.com/forum/read/184496.


对于跨域请求,获取的站点没有帮助设置许可CORS 政策 http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing, Greasemonkey 提供the GM_xmlhttpRequest()功能 http://wiki.greasespot.net/GM_xmlhttpRequest。 (大多数其他用户脚本引擎也提供此功能。)

GM_xmlhttpRequest明确设计为允许跨域请求。

要获取您的目标信息,请创建一个DOMParser关于结果。不要使用 jQuery 方法,因为这会导致加载无关的图像、脚本和对象、减慢速度或使页面崩溃。

Here's 一个完整的脚本说明了该过程:

// ==UserScript==
// @name        _Parse Ajax Response for specific nodes
// @include     http://stackoverflow.com/questions/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant       GM_xmlhttpRequest
// ==/UserScript==

GM_xmlhttpRequest ( {
    method: "GET",
    url:    "http://www.rottentomatoes.com/m/godfather/",
    onload: function (response) {
        var parser  = new DOMParser ();
        /* IMPORTANT!
            1) For Chrome, see
            https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#DOMParser_HTML_extension_for_other_browsers
            for a work-around.

            2) jQuery.parseHTML() and similar are bad because it causes images, etc., to be loaded.
        */
        var doc         = parser.parseFromString (response.responseText, "text/html");
        var criticTxt   = doc.getElementsByClassName ("critic_consensus")[0].textContent;

        $("body").prepend ('<h1>' + criticTxt + '</h1>');
    },
    onerror: function (e) {
        console.error ('**** error ', e);
    },
    onabort: function (e) {
        console.error ('**** abort ', e);
    },
    ontimeout: function (e) {
        console.error ('**** timeout ', e);
    }
} );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 XMLHttpRequest 在后台下载 HTML 页面并从中提取文本元素? 的相关文章

随机推荐

  • Primeng 分页器在调用 API 后无法重置第 1 页

    我有两个函数来加载数据 初始化页面和搜索页面时 初始化页面时 数据显示为5页 我点击第3页 数据分页显示就OK了 之后 进入数据搜索 数据表重新加载 但页码没有重置为1 仍然是第3页 在 HTML 中
  • 第一次从 MVC 站点访问时,WCF 服务返回“请求的服务‘...’无法激活”

    我们有一个由 MVC3 网站访问的 WCF 服务 没有安全性 在开发人员计算机上 我们没有任何问题 但是当我们的 TeamCity 设置构建中央版本并将其部署在 IIS7 下时 我们第一次加载 MVC3 站点并且它访问 WCF 服务 服务调
  • 在 Delphi 中如何位反映一个字节?

    在Delphi中是否有一种简单的方法来位反映字节变量 以便最高有效位 MSB 获得最低有效位 LSB 反之亦然 在代码中你可以这样做 function ReverseBits b Byte Byte var i Integer begin
  • 具有派生接口的 C# 接口实现

    在下面的示例中 类 SomeClass 没有实现 ISomeInterface 为什么我不能通过传递一个更派生的接口来实现这一点 该接口确实实现了基本要求 无论传递什么实例 它仍然会实现基础 我是否遗漏了什么 namespace Test
  • 搜索标签,然后将标签之间的文本保存为变量

    我对 Java 很陌生 但是我如何在文件中搜索标签 然后标签之间的所有内容 如文本字符串 将被分配给一个变量 例如 我有 但后来我想将字符串 THE TITLE 保存到一个名为 title1 的变量或其他变量中 我应该怎样做呢 谢谢 如果你
  • 结构赋值是否保证填充也相等

    假设我有一个包含 2 个字段的结构 并且我的 C 实现在这些字段之间也有一些填充 如果我创建结构体的两个变量并将一个变量分配给另一个变量 是否可以保证填充相等 我知道对于大多数编译器来说都是如此 因为它们只是调用 memcpy 但我想知道标
  • DB.eval() 与 Mongo Java 驱动程序

    我准备了一些在 Mongo 上执行的脚本 它按照命令行的预期工作 mongo 127 0 0 1 27017 dbName script js 但是当我尝试在 java scala 代码中移动它时 它不起作用 db eval scriptC
  • SQL Server 中 mysql“LIMIT”子句的等效语法是什么

    SQL Server 中 MySQL LIMIT 子句的等效语法是什么 我想用它来对我的结果进行分页 想要显示记录5到10 最接近的是 TOP Select top 5 from tablename 您可以获得一个范围 第 5 10 行 S
  • SAPUI5 路由配置中“controlAggregation”的含义是什么?

    我真的不明白下面的属性 controlAggregation 对于路由 SAPUI5 应用程序有何作用 不存在具有该 id 的元素 我在此处找到的演示应用程序中的任何位置都找不到对 页面 的任何引用 SAPUI5路由演示 https sap
  • java indexof(String str) 方法复杂性[重复]

    这个问题在这里已经有答案了 可能的重复 String indexof 函数调用的成本 复杂性是多少 https stackoverflow com questions 3562919 what is the cost complexity
  • 使用未声明的类型“PHAsset”BSImagePicker

    我在 swift 中从 CocoaPods 导入了一个模块 我做了所有需要做的事情 而且它也有效 因为模块已成功导入 我现在想测试 BSimagepicker 的一些演示脚本 但它显示未声明的类型 PHAsset 我需要做的是选择不同的图像
  • 如何在 Spark RDD 中比较不区分大小写的字符串?

    我有以下数据集 drug name num prescriber total cost AMBIEN 2 300 BENZTROPINE MESYLATE 1 1500 CHLORPROMAZINE 2 3000 想要从上面的数据集中找出
  • 以编程方式安装 Chrome 扩展程序

    我知道这个问题已经被问了很多 我读了所有这些 但找不到与我的问题相关的任何内容 所以再次询问 我做了一个简单的 chrome 扩展 还使用 chrome 将其打包为 crx 我想使用 nsis 或 C 安装程序以编程方式安装它 从这里得到一
  • 将 setDate 与 jQueryUi 日期选择器结合使用

    我正在尝试将另一个日期选择器的日期设置为距原始日期选择器关闭整整 1 年 我有以下代码 myDatepicker1 datepicker onClose function dateText inst myDatepicker2 datepi
  • 蟒蛇+igrph。类型错误:绘图不可用

    我想使用python笔记本 igraph包来画图 示例代码在这里 我认为是对的 pip install cairocffi import cairocffi as cairo corlor for i in g vs name if set
  • 适用于 Android 的 YouTube Api 异常“service_missing”

    我想在我的 Android 应用程序中播放 YouTube 视频 我在 YouTube 初始化时遇到异常 例如 service missing 我写下面的代码 package com example youtubedemo import a
  • 现在 Xna 不受支持,什么是更好的选择? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 节点 UnhandledPromiseRejectionWarning

    我的 npm 包有一个问题 就像这个问题 但我不知道如何解决 什么是未处理的 Promise 拒绝 https stackoverflow com questions 40500490 what is unhandled promise r
  • Android 手机中的部分唤醒锁功耗

    我正在创建一个远程服务来保持 PARTIAL WAKE LOCK 以便不断地 做一些后台工作 我预计 Android 设备的功耗范围是多少 由此 在我的设备上 从充满电开始测量 电池续航时间在 30 分钟到 2 小时之间 None
  • 如何使用 XMLHttpRequest 在后台下载 HTML 页面并从中提取文本元素?

    我想制作一个 Greasemonkey 脚本 当您在 URL 1 中时 该脚本会在后台解析 URL 2 的整个 HTML 网页 以便从中提取文本元素 具体来说 我想下载整个页面的 HTML 代码 a烂番茄page 在后台并将其存储在变量中