gpt4 book ai didi

javascript - 如何在 CasperJS 中使用 JavaScript 从文档中检索 "just text"

转载 作者:可可西里 更新时间:2023-11-01 13:07:04 25 4
gpt4 key购买 nike

我想知道如何使用 JavaScript 选择正文中的纯文本。它没有名称、ID、标签,只有文本。Body 没有名字,也没有 id。

如何在 CasperJS 中使用 JavaScript 选择此文本?

这是网站的html

<html>
<head>
<title>site title</title>
</head>
<body>
<p>I don't want to scraping here</p>
<div align="right">
<a href="/html/blabla.html">TOP</a>&nbsp;&nbsp;<a href="/html/list.html">一つ戻る</a>
</div>
<h3>I don't want to scraping here too <a href="/html/blabla.html"><font size="3">abcdef</font></a></h3>
***"
2015年07月16日 10時50分時点" <---------I want to scrape here!!!!***
<br>
<ui>..</ui>
<br>
<div align="right">
<a href="/html/blabla.html">TOP</a>&nbsp;&nbsp;<a href="/html/list.html">一つ戻る</a>
</div>
<hr size="1">
<div align="center" style="padding:5px 0px;">(c)company name</div>
</body>
</html>

这是我的代码

var casper = require('casper').create({
clientScripts: ["includes/jquery-2.1.3.min.js"],
verbose: true,
logLevel: 'debug',
pageSettings: {
webSecurityEnabled: false
}
});
var fs = require('fs');
var rli;
var result = null;
var pattern = /<[^>]+>/g;
var rui;
var list;
var result;



casper.start();

casper.then(function() {
var current = 1;
var end = 2;

for (;current < end;) {

(function(cntr) {

casper.thenOpen('http://site/0'+cntr+'/' , function() {
this.echo('casper.async: '+cntr+casper.getCurrentUrl());
// here we can download stuff

lists = this.evaluate(function () {

var elements = document.querySelectorAll('ui'); // scraping ui is okay


result= Array.prototype.map.call(elements, function (element) {
return element.innerText + ' [ ***here I want to save the upper date data*** ]'; //

});
return result;
});

this.echo(lists.length);
this.echo(lists.join('\n'));

// casper.capture( 'capture'+cntr+'.png' );

fs.write('results'+cntr+'.txt', lists);
});
})(current);

current++;
}
});

casper.run(function() {
this.echo('Done.').exit();
});

最佳答案

让我们确定这是什么。它是 div 容器内的文本节点。您不会对 CSS 选择器走得太远,因为它们只适用于实际元素,而不适用于 TextNode。

使用 XPath

您可以使用普通的 JavaScript 方法迭代这些元素,直到到达 TextNode,但我更喜欢 XPath 表达式。 CasperJS 为它们提供了一个辅助工具:

var x = require('casper').selectXPath;
...
var text = casper.fetchText(x("//body/div[@align='right']/h3/following-sibling::node()[1]"));
casper.echo(text);

该表达式大部分是不言自明的。第一部分 ( //body/div[@align='right']/h3 ) 匹配 <h3>直接在要检索的文本之前的元素。 following-sibling::node()[1]有点棘手。 following-sibling::node()将匹配类型为 node() 的所有节点当前节点 (h3) 之后的(TextNode 所属的)。 [1]只会从中取出第一个。

你可以用 //ui/preceding-sibling::node()[1] 做同样的事情.

使用 JavaScript

你可以用 JavaScript 做同样的事情:

var text = casper.evaluate(function(){
return document.querySelector("body > div[align='right'] > h3").nextSibling.textContent;
});

var text = casper.evaluate(function(){
return document.querySelector("ui").previousSibling.textContent;
});

关于javascript - 如何在 CasperJS 中使用 JavaScript 从文档中检索 "just text",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com