如何从网页复制特定元素

2024-01-23

我的目标是从网页中获取特定的文本区域。想象一下,就好像您能够在页面上的任何位置绘制一个矩形,并且该矩形中的所有内容都将被复制到剪贴板中。我正在使用 FireBug(请随意建议其他解决方案,我已经搜索了插件或书签,但没有找到任何有用的东西)及其控制台窗口和 XPath 用于此目的。我想要获取的值采用以下格式(这是从 FireBug“HTML 检查”观察到的):

<span class="number3_0" title="Numbers">3.00</span>

所以我最终得到以下代码,这是我从 FireBug 控制台发出的:$x("//span[@title='Numbers']/text()")

之后我得到这样的东西:

[<TextNode textContent="2.00">, <TextNode textContent="2.00">, <TextNode textContent="2.00">, <TextNode textContent="2.00">, <TextNode textContent="3.00">]

之后我单击(用鼠标右键)[并选择Inspect in DOM panel然后我按ctrl+a并按以下格式复制/粘贴数据:

0   <TextNode textContent="2.00">
1   <TextNode textContent="2.00">
2   <TextNode textContent="2.00">
3   <TextNode textContent="2.00">
4   <TextNode textContent="3.00">

正如您可以假设的值textContent是我感兴趣的信息。我尝试修改原始 XPath 查询以仅返回这些数字,但没有成功。我曾是:

将整个查询包装成string()正如这里所建议的Xpath - 仅获取节点内容而没有其他元素 https://stackoverflow.com/questions/4455684/xpath-get-only-node-content-without-other-elements

试图弄清楚这个是如何工作的通过 XPath 提取节点之间的文本 https://stackoverflow.com/questions/10182587/extracting-text-in-between-nodes-through-xpath还有更多。

为了能够获得所需的值,我使用了一些 bash 脚本 + xml 格式,在这个繁琐/容易出错的任务之后,我得到以下格式:

<?xml version="1.0"?>
<head>
  <TextNode textContent="2.00"/>
  <TextNode textContent="2.00"/>
  <TextNode textContent="2.00"/>
  <TextNode textContent="2.00"/>
  <TextNode textContent="3.00"/>
  <TextNode textContent="3.00"/>
</head>

现在我用xmlstarlet通过以下方式获取这些值(是的,我知道我可以在上一步中使用 regexp 并拥有我需要的所有数据。但我对 DOM/XPath 解析很感兴趣,并试图弄清楚它是如何工作的):

cat input | xmlstarlet sel -t -m "//TextNode" -v 'concat(@textContent," 
")'

这最终给了我想要的输出:

2.00
2.00
2.00
2.00
3.00

我的问题有点笼统:

  1. 这个可怕的漫长过程如何自动化?
  2. 如何修改 FireBug 中使用的原始 XPath 字符串$x("//span[@title='Numbers']/text()")立即获得仅 数字并节省剩下的步骤?
  3. 我还是不太熟悉xmlstarlet,特别是选择 (sel)模式让我发疯。我见过各种组合 以下选项:

    -c 或 --copy-of - 打印 XPATH 表达式的副本

    -v 或 --value-of - 打印 XPATH 表达式的值

    -o 或 --output - 输出字符串文字

    -m 或 --match - 匹配 XPATH 表达式

有人可以解释一下何时使用哪一个吗?如果可能的话,我们很高兴看到具体的例子。如果感兴趣的话,有提到的选项的各种组合,我不太理解:http://www.grahl.ch/blog/minutiae-return-content-element-xmlstarlet http://www.grahl.ch/blog/minutiae-return-content-element-xmlstarlet 使用 xmlstarlet 提取和转储元素 https://stackoverflow.com/questions/1890690/extracting-and-dumping-elements-using-xmlstarlet/1897283#1897283 测试 XML 属性 https://stackoverflow.com/questions/5580372/testing-for-an-xml-attribute/

4.) 最后一个问题是关于xmlstarlet是一个有点装饰性的语法糖,如何获得漂亮的换行符分隔输出,正如你所看到的,我通过添加换行符作为分隔符来“作弊”,但是当我尝试使用这样的转义字符时:

cat input | xmlstarlet sel -t -m "//TextNode" -v 'concat(@textContent,"\n")'

它不起作用,而且我从中学到很多东西的原始参考资料也以这种“丑陋”的方式使用它http://www.ibm.com/developerworks/library/x-starlet/index.html http://www.ibm.com/developerworks/library/x-starlet/index.html

PS:也许所有这些步骤都可以使用curl + xmlstarlet 来简化,但是对于需要登录或其他内容的页面也可以使用FireBug 选项,这可能会很方便。

感谢您的所有想法。


根据我收集的信息,您希望从标题为“Numbers”的跨度中收集数字,并希望将其作为字符串。

请尝试以下操作:

var numberNodes = document.querySelectorAll('span[title="Numbers"]')
function giveText(me) { return me.textContent; }
Array.prototype.map.call(numberNodes, giveText).join("\n");

第一行使用 CSS 查询选择器选择文档中的所有节点(这意味着您不需要 XPath)。 第二行创建一个返回节点文本内容的函数。 第三行映射来自numberNodes列出使用giveText函数,生成一个数字数组,然后最后用换行符将它们连接起来。

此后您可能不再需要这个 xmlstarlet。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从网页复制特定元素 的相关文章

  • 调用函数值[重复]

    这个问题在这里已经有答案了 可能的重复 函数提前触发 https stackoverflow com questions 12201816 function triggering early 我已经编写了这段代码 但是当我调用函数 test
  • 如何使用复选框来过滤 Angular 的结果?

    我正在尝试使用复选框应用过滤器 复选框正确显示 div div
  • 内联 div 元素

    我试图将 div 元素放在一起 问题是 即使有足够的空间让两个元素位于同一行 新的 div 也会将自身移动到下一行 如果没有足够的空间 我只需要另一个 div 去到下一行 有人知道怎么做这个吗 将 CSS 显示样式设置为display in
  • div 全宽的响应式背景图像

    我正在尝试弄清楚如何在 div 全宽和响应式中制作背景图像 背景图像在页面的宽度上扩展 并且具有响应性 但图像的高度不是其完整高度 似乎它被某种方式切断了 我正在使用引导框架 我尝试这样做的原因是我想在图像上覆盖一些文本 我尝试了很多不同的
  • 如何将 blob 文件附加到 HTML href="mailto:" 中

    我有一个可通过 URL 获取的文件 需要授权 我创建了一个 mailto 链接 并希望将此文件附加到邮件中 我怎样才能做到这一点 类似于 mailto 电子邮件受保护 cdn cgi l email protection attachmen
  • 某些网站如何在 iOS Safari 中内嵌播放视频?

    非常令人难以置信 因为我认为所有视频都可以在常规野生动物园中扩展为全屏播放 例如检查一下 https entertainment theonion com the onion reviews rogue one 1819596116 htt
  • 如何使用 Soundcloud api 将流传输到 html5 音频播放器中?

    我刚刚开始学习 javascript 作为我的第一次尝试 我想创建自定义音频播放器 它使用 soundcloud 的 api 作为音乐源 到目前为止 这就是我的设置
  • 如何在输入时格式化 contenteditable div?

    我正在尝试编写一个函数 允许 contenteditable div 在用户输入 div 时执行一些自动格式化 到目前为止我只能让它在 IE 中运行 有人可以帮助我吗 function formatOnKeyUp if window get
  • 使用 jQuery 的 ASP.NET 中的模态表单

    我对 ASP NET 开发还比较陌生 到目前为止 我已经设法让事情变得简单 但我现在的需求有点复杂 到目前为止还没有得到太多乐趣 本质上我希望在单击按钮添加新用户时弹出一个模式表单 所以我发现这个在 jQuery 网站上 http jque
  • 如何将一个div的内容克隆到另一个div

    我想使用jquery克隆将选定div的内容复制到另一个div 但我不想将它附加到任何地方 我的意思是 当我们用 jquery 克隆一个 div 时 如果我错了 请纠正我 我们必须设置它的位置 它将动态创建一个显示的新分区 但我想获取所选di
  • Aurelia 以 PHP 传递的参数开头

    我需要在开始时将参数传递给 Aurelia 根据传递的值 应用程序将具有不同的状态 该应用程序被注入到使用 PHP 构建的页面上 因此最好的方法是使用 PHP 代码指定的参数启动它 有什么办法可以做到这一点吗 您可以在普通 JS 中访问的任
  • HTML 实体到 PHP 中的普通字符串

    我有一个 PHP 中包含 HTML 实体的字符串 在 html 源中我可以看到 html 实体 但在输出中我的字符串没有 html 实体 like HTML 源代码 a href google com Me nbsp You a 我该如何更
  • 如何在 html 中设置 alt 工具提示的样式? [复制]

    这个问题在这里已经有答案了 是否可以为 alt 属性设置工具提示的样式 我希望为 html 设置背景 字体颜色等样式alt属性 有人可以帮我解决这个问题吗 您无法设计默认的工具提示 即设置样式alt属性 但你可以使用 Javascript
  • 通过 HTML 将复杂变量传递给 javascript 的正确方法

    我试图摆脱使用 PHP 的 htmlentities 但我在这里停止了 但后来我想 我不做替换和检查特殊字符 而是只 JSON 整个对象 这提供了一个非常不受欢迎的结果 其中包含大量双引号 那么我应该怎么做呢 我应该为每个图像分配一个数字唯
  • 如何解决输入字段上的错误行高?

    如何为具有固定高度的输入字段提供其所包含文本的跨浏览器垂直对齐方式 截至目前看来line height是我最好的选择 但是 在 Chrome 或 Safari 等 webkit 浏览器上 复制 粘贴时光标会跳至顶部对齐 我注意到 WordP
  • 重定向后 HTML5 CORS 请求在 safari 中失败

    我正在使用 jQuery 制作 CORS 请求来完成 SSO 类型系统 用户登录 WordPress 同时使用钩子也登录 Moodle 我遇到的问题是 在 Safari 中 仅限 safari 7 当初始 POST 请求设置为 mudles
  • Gecko/Firefox 对 HTML5 通知的支持

    我想知道是否有任何内置支持HTML5 通知到目前为止 Gecko 浏览器有哪些功能 也许有一些隐藏的开发人员 我知道 WebKitwindow webkitNotifications效果很好 那么 有 Firefox 实现吗 Update
  • 头部带有脚本的 Nodejs EJS 部分

    我正在使用 EJS 从 Nodejs 服务器渲染和服务器 HTML 页面 我包含的一些部分在头部引用了脚本和样式表 但这会导致客户端对同一文件发出多个请求 例如 如果父视图也包含该文件 例如
  • 如何使用 PHP 解释 HTML5 输入日期值

    我需要让用户选择一个日期 最好采用 dd mm yy 格式 我决定尝试新的 HTML5 输入日期类型 但是我不知道如何解释它在服务器端给出的值 我得到的值是 yyyy mm dd 我怎样才能做到这一点 如果用户使用不支持它的旧版浏览器怎么办
  • 如何让JS变量在页面刷新后保留值? [复制]

    这个问题在这里已经有答案了 是否可以永久更改 JavaScript 变量 例如 如果我设置变量 X 并使其等于 1 然后按钮的 onClick 将该变量更改为 2 如何使该变量在刷新页面时保持为 2 这是可能的window localSto

随机推荐

  • 在 WPF 中绑定图像?

    我想在 WPF 中显示由进程创建的图像 例如 我们有一个名为 createWPFImage 的方法 Image createWPFImage 因此 createWPFImage 的输出是一个图像 在 XAML 代码中 我们有如下所示的内容
  • android中如何区分480 * 800和480 * 854屏幕分辨率的布局?

    在其中一个应用程序中 我需要确保 UI 组件将放置在所有屏幕分辨率设备中的正确位置 我已经浏览了 Android 开发者网站上的支持多种屏幕分辨率教程 基于此 我似乎可能必须为小屏幕 普通屏幕和大屏幕设备创建单独的布局文件 现在的问题是 即
  • 我有以下 HTML 代码
  • iOS 上的 Firebase 崩溃报告出现不可读错误(符号文件)

    我正在使用 firebase 崩溃报告来让我的 iphone 项目崩溃 但我收到的日志不可读 Exception name EXC BREAKPOINT EXC ARM BREAKPOINT TPC swift 4295841940 284
  • 在 Xamarin 中使用 OnBackPressedCallback

    我正在尝试在 Xamarin 的片段中实现类似于 OnBackPressed 的东西 但到目前为止我找到的唯一解决方案是针对 Java 的 Here https stackoverflow com questions 5448653 how
  • 如何更正 Invalid Protocol: null 使用 javax.mail 发送邮件

    我正在尝试以这种方式发送邮件 Properties props new Properties props setProperty mail transport protocol smtp props setProperty mail hos
  • 使用 Netezza 时差(以秒为单位)?

    我想获取 Netezza 中以分钟为单位的时差 以秒为单位 我有 2 列 Start 2014 06 01 07 45 04 and finish 2014 06 01 07 46 58 events 我尝试过使用DATEDIFF SECO
  • 如何查看设备是iPhone 5? [复制]

    这个问题在这里已经有答案了 如何检查应用程序是否在 iPhone 5 上运行 然后执行某些操作 define IS IPHONE 5 fabs double UIScreen mainScreen bounds size height do
  • 列表查找比元组更快?

    过去 当我需要在紧密循环中进行类似数组的索引查找时 我通常使用元组 因为它们通常看起来性能非常好 接近于仅使用 n 个变量 然而 我今天决定质疑这个假设 并得出了一些令人惊讶的结果 In 102 l range 1000 In 103 t
  • 从 GeoPy 地理编码器返回各个地址组成部分(城市、州等)

    我正在使用 GeoPy 将地址地理编码为经纬度 我还想提取每个地址的逐项地址组成部分 街道 城市 州 邮政编码 GeoPy 返回一个带有地址的字符串 但我找不到可靠的方法来分离每个组件 例如 123 Main Street Los Ange
  • 使用 sklearn 和线性回归时出错:形状 (1,16) 和 (1,1) 未对齐:16 (dim 1) != 1 (dim 0)

    我想了解机器学习 我偶然发现了 youtube Siraj 和他的 Udacity 视频 并想尝试学习一些东西 他的视频参考 在他的视频中 他导入并读取了一个txt文件 但是当我尝试重新创建txt文件时 它无法正确读取 相反 我尝试使用相同
  • 将 ruby​​ 变量传递给配置者

    我有一个 Vagrant 文件 它定义了这样的配置程序 config vm provision shell path gt set rmi hostname sh args gt
  • 如何向 GCP 中的 dataproc 集群添加 jar 依赖项?

    特别是 如何添加 Spark bigquery connector 以便可以从 dataproc 的 Jupyter Web 界面中查询数据 关键链接 https github com GoogleCloudPlatform spark b
  • 获取乳胶输出块的高度

    我正在尝试确定如何获得乳胶块的高度output not整个文件 以及not代码 而是一个block of output 作为我想要完成的一个例子 我有乳胶代码 sum i 0 infty frac 1 n gt infty newline
  • 删除不再位于远程的跟踪分支

    有没有一种简单的方法可以删除远程等效项不再存在的所有跟踪分支 Example 分支机构 本地和远程 master 起源 主人 起源 错误修复 a 起源 错误修复 b 起源 错误修复 c 在本地 我只有一个主分支 现在我需要努力错误修复a 所
  • 如何删除布局和背景之间的空间?

    我拥有的是一个相对布局 其中包含其他两个相对布局 每个布局都有图像 我已将每个图像作为其相对布局的背景 但我仍然可以看到图像 布局 和整个父布局之间的空间 那么我怎样才能删除这个空间呢 这是我的 XML 代码
  • Chrome v41+ 显示性能问题:无;在很多节点上

    我最近注意到 Chrome 在申请时出现呕吐现象display none 到很多节点 CodePen 示例 http codepen io mattdietsche pen JomjWx 在上面的 CodePen 中 您可以看到切换时的滞后
  • 基础5和页面打印

    我正在使用 Zurb 基金会 我试图完全按照大屏幕中的外观打印页面 但所有内容都堆积起来 并且浮动错误 通过将 Foundation min css 中出现的每个 屏幕 替换为 打印 屏幕 我成功地在打印页面中添加了网格 问题是现在取的格子
  • 在多租户架构中为每个租户将异常记录在单独的文件中

    我有一个支持多租户的应用程序 即一台服务器和多个数据库 每个租户都有单独的数据库 应用程序中引发的所有异常都将记录在一个日志中 租户 ID 将与异常一起打印 我想在单独的文件中处理它 即为每个租户一个单独的日志文件 这将有助于确定此异常是由
  • 如何从网页复制特定元素

    我的目标是从网页中获取特定的文本区域 想象一下 就好像您能够在页面上的任何位置绘制一个矩形 并且该矩形中的所有内容都将被复制到剪贴板中 我正在使用 FireBug 请随意建议其他解决方案 我已经搜索了插件或书签 但没有找到任何有用的东西 及