在 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/
我需要获取 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/