在CasperJS中获取动态id值

时间:2015-04-19 20:42:46

标签: javascript phantomjs casperjs

我需要获取id =" 1"的值这是动态的,紧跟在id =" divContenedor"。

之后
<html debug="true">
<head>
<script src="chrome-extension://bmagokdooijbeehmkpknfglimnifench/googleChrome.js"/>
<body onload="/*xajax.$('cargando').style.top=document.body.scrollTop+300+'px'; xajax.$('cargando').style.left=document.body.scrollWidth/2-121+'px';*/" onclose="alert('lalala');" style="cursor: default;">
<div id="general" style="text-align: left;">
<table width="100%" cellspacing="0" cellpadding="0" style="margin-bottom: 8px;">
<div id="notas" class="notas"/>
<div id="divContenedor" class="central">
**<div id="1">**
<div style="padding: 4px 0px; border-top-width: 1px; border-top-style: solid; border-top-color: rgb(181, 209, 221);">
<div class="menuContenedor">
<span style="float: right;">

我的CasperJS代码:

var casper = require('casper').create();
casper.start('http:\\www.example.es');

casper.then(function() {
  var id = document.getElementById('divContenedor').firstChild
  this.echo(id);
});

casper.run();

1 个答案:

答案 0 :(得分:2)

CasperJS构建于PhantomJS之上,并使用其两种上下文的模型。只有页面上下文才能访问DOM,您只能将可序列化的值传入和传出。这是通过casper.evaluate()

完成的
casper.then(function() {
    var id = this.evaluate(function(sel) {
      return document.getElementById(sel).children[0].id;
    }, 'divContenedor');
    this.echo(id);
});

evaluate()的PhantomJS文档有一个重要的注意事项:

  

注意: evaluate函数的参数和返回值必须是一个简单的原始对象。经验法则:如果它可以通过JSON序列化,那就没关系了。

     

闭包,函数,DOM节点等将工作!


其他小事:

  • element.firstChild适用于节点而不仅仅是元素。所以第一个孩子可能总是一个没有id的TextNode。
  • http:\\www.example.es不是有效的网址。使用正斜杠:http://www.example.es/