如何检索"只是文字"来自CasperJS中的JavaScript文档

时间:2015-07-16 02:32:08

标签: javascript html text casperjs

我想知道如何使用JavaScript在正文中选择纯文本。 它没有名称,标识,标签,只有文字。 身体也没有名字,也是。

如何在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();
});

1 个答案:

答案 0 :(得分:3)

让我们确定这是什么。它是div容器内的文本节点。你不会对CSS选择器有所了解,因为它们只适用于实际元素,而不适用于TextNodes。

使用XPath

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

_textField.placeholder = @"Enter Something";

表达式大多是不言自明的。第一部分(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]将匹配当前节点(h3)之后的following-sibling::node()类型的节点(TextNode所属的节点)。 node()只接受第一个。

您可以使用[1]执行相同的操作。

使用JavaScript

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

//ui/preceding-sibling::node()[1]

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