在 CasperJS 中获取动态 id 值

Get dynamic id value in 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();

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 文档有一个重要说明:

Note: The arguments and the return value to the evaluate function must be a simple primitive object. The rule of thumb: if it can be serialized via JSON, then it is fine.

Closures, functions, DOM nodes, etc. will not work!


其他小东西:

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