- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 CasperJS 1.1 和以下代码,我可以从网页中获取有用的 DOM html。
casper.each(c.getElementsInfo(xpath), function(casper, element, j) {
var html = element["html"].trim();
if(html.indexOf('Phone') > -1) {
// what should I put here?
}
});
但是,我想访问并获取该元素的子元素。我怎样才能实现这个目标?元素的 HTML 源代码(又名 html
的值)如下:
循环 1
<div class="fields">
Phone
</div>
<div class="values">
<a href="tel: 12345678">12345678</a> (Mr. Lee) </div>
循环2
<div class="fields">
Emergency Phone
</div>
<div class="values">
<a href="tel: 23456789 (Emergency)">23456789 (Emergency)</a>
</div>
循环3
<div class="fields">
Opening Hours
</div>
<div class="values">
9:00am-6:30pm(Weekday) /
Close on Sundays and Public Holidays(Can be booked)(Holiday)
</div>
循环 4
<div class="fields">
Last Update
</div>
<div class="values">
11/06/14 </div>
上面的 HTML 格式错误,并且包含大量空格。
我想要获取的数据是:
尝试过正则表达式,但正则表达式太复杂。
最佳答案
我不建议使用正则表达式执行此操作。使用一些选择器可以轻松完成此操作,但必须在页面上下文中(在 evaluate()
回调内部)完成,因为 DOM 节点无法传递到外部。
CasperJS 提供了一个辅助函数,用于通过 XPath 与 __utils__.getElementsByXPath()
匹配 DOM 节点通过始终自动插入的 ClientUtils 模块。该函数的结果是一个数组,因此适用正常的 forEach()
模式。 DOM 节点可用作上下文节点,用于使用 el.querySelector(".class")
选择子元素。
var info = casper.evaluate(function(xpath){
var obj = {};
__utils__.getElementsByXPath(xpath).forEach(function(el){
obj[el.querySelector(".fields").textContent.trim()] =
el.querySelector(".values").textContent.trim();
});
return obj;
}, yourXPathString);
如果您想基于 CSS 选择器选择元素,请使用以下命令:
var info = casper.evaluate(function(cssSelector){
var obj = {};
__utils__.findAll(cssSelector).forEach(function(el){
obj[el.querySelector(".fields").textContent.trim()] =
el.querySelector(".values").textContent.trim();
});
return obj;
}, yourCssSelector);
关于javascript - 获取 casper.each 中的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910495/
docs strate你可以通过 options反对casperjs.create()包括要注入(inject)到客户端页面的 js clientScripts。 docs also state你不应
可以在 casper.evaluate() 中使用 casper 函数并在其中包含 jquery 代码吗?我需要以类似于 jquery 的方式迭代元素。 我正在加载 jquery.js 库 这是我的尝
我做了这个小测试: casper.test.begin('Test', function() { casper.start(); casper.then(function() { casper
我正在将 casper JS 数据保存到 CSV 文件中,但如何转义逗号才能使其不作为新列包含在 CSV 文件中? 例子 var data = "asdf, fff"; fs = require('f
我想做的是声明两个caspers,两个将登录到某个站点,一个充当管理员,另一个充当典型用户。我想在一个脚本中完成。 是否可以在一个脚本中声明两个或多个 casper?就像这个: var casper1
这是一个有点棘手的问题。 我非常熟悉 javascript,但是我在一个使用 PhantomJS 和 CasperJS 自动抓取网站的项目中。这些对我来说都是全新的主题。 我能够弄清楚如何使用 Cas
我试图弄清楚 Casper.js 到底是如何使用底层 Phantom.js 来移动 mouse 的。 。 我发现casper.page.sendEvent()是负责的,但是 sendEvent 定义在
在下面的代码中,我想调用checkMainBox(cthis)。我想对其进行设置,以便该函数返回检索到的数字或返回 false。但在 checkMainBox() 中我不知道如何返回值。返回的数字未定
我尝试使用以下程序等待 5 秒,然后再单击下一个链接。但我看到 casper.wait 根本不等待 5 秒。 我需要等待 5 秒,以便我想要抓取的 url 上的 ajax 代码有足够的时间加载。 va
我使用以下脚本来循环访问页面的选项以获取后续值: var casper = require('casper').create(); casper.on('remote.message', functi
使用 CasperJS 1.1 和以下代码,我可以从网页中获取有用的 DOM html。 casper.each(c.getElementsInfo(xpath), function(casper,
我有一些 HTML Lane 1 Uncounted Count 我能够计算行数 casper.test.assertElementCount('[data-automat
我为我们的应用程序开发了 CasperJS 脚本。有时它工作得很好,但有时却达不到我们的预期。 你能帮我一下吗?我可以在哪里改进我的脚本来实现它? 请找到下面的脚本。 casper.test.comm
我制作了一个快速脚本来从 Reddit 帖子列表中捕获屏幕截图。该脚本从 json 文件中获取 reddit url(示例如下所示),然后访问每个页面以捕获屏幕截图。 该脚本对于大多数人来说效果都很好
我一直在使用开源数据集提供程序 Casper 来实现 Java 中数据库对象集合的内存表示。 Github 存储库:https://github.com/casperds/casperdatasets
有没有什么办法可以使用casper.js登录页面然后显示页面?我可以截屏,我希望它是实际页面。 到目前为止,这是我所拥有的,尽管我确信这是非常错误的: var casper = require('ca
向函数添加 this.echo 命令会导致在设置链接之前调用 casper.run 方法 var casper = require('casper').create(); function getLi
是否可以将函数传递给 casper.evaluate() var casper = require('casper').create({ //verbose: true, logLev
我想在我的脚本中多次调用 casper.start()。 我试过: var ids = [1,6,13]; ids.forEach(function(id) { casper.start('h
我需要将测试结果存储在任何存储器中。但不幸的是,它在任何时候引发异常“CasperError:找不到模块网络”时都不适用于任何数据库驱动程序: var require = patchRequire(r
我是一名优秀的程序员,十分优秀!