CasperJS 中 evaluate() 中的 DOM 元素缺少 click() 函数
click() function is missing on DOM element in evaluate() in CasperJS
与 CasperJS 相比,我在 Chrome 控制台的 DOM 元素上看到了不同的方法。我有以下内容 运行
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
var url = 'http://casperjs.org/';
casper.start(url, function() {
this.echo('sdfsdf');
});
casper.then(function() {
var link = this.evaluate(function() {
var b = document.querySelector(".page-header");
var s = "";
for (var m in b) {
if (typeof b[m] === 'function') {
s += JSON.stringify(m) + " ";
}
}
return s;
});
console.log(link);
});
casper.run();
产生
"children" "childNodes" "insertAdjacentElement" "insertAdjacentHTML"
"insertAdjacentText" "setAttribute" "getElementsByTagName"
"getAttribute" "querySelectorAll" "webkitMatchesSelector"
"getElementsByClassName" "contains" "getBoundingClientRect"
"removeAttribute" "querySelector" "hasAttribute" "getAttributeNode"
"getAttributeNS" "getElementsByTagNameNS" "removeAttributeNS"
"getClientRects" "scrollByPages" "setAttributeNode" "setAttributeNS"
"hasAttributeNS" "blur" "scrollIntoViewIfNeeded" "scrollByLines"
"setAttributeNodeNS" "removeAttributeNode" "getAttributeNodeNS"
"focus" "scrollIntoView" "addEventListener" "appendChild" "cloneNode"
"removeChild" "removeEventListener" "compareDocumentPosition"
"insertBefore" "hasAttributes" "isSupported" "isEqualNode"
"dispatchEvent" "isDefaultNamespace" "hasChildNodes" "normalize"
"replaceChild" "isSameNode" "lookupPrefix" "lookupNamespaceURI"
另一方面,如果我 运行 在 Chrome 的控制台中输入以下代码
var b = document.querySelector(".page-header");
var s = "";
for (var m in b) {
if (typeof b[m] === 'function') {
s += JSON.stringify(m) + " ";
}
}
我得到以下信息。为什么缺少 CasperJS click
?
""click" "focus" "blur" "hasAttributes" "getAttribute"
"getAttributeNS" "setAttribute" "setAttributeNS" "removeAttribute"
"removeAttributeNS" "hasAttribute" "hasAttributeNS" "getAttributeNode"
"getAttributeNodeNS" "setAttributeNode" "setAttributeNodeNS"
"removeAttributeNode" "closest" "matches" "getElementsByTagName"
"getElementsByTagNameNS" "getElementsByClassName" "insertAdjacentHTML"
"createShadowRoot" "getDestinationInsertionPoints"
"requestPointerLock" "getClientRects" "getBoundingClientRect"
"scrollIntoView" "insertAdjacentElement" "insertAdjacentText"
"scrollIntoViewIfNeeded" "webkitMatchesSelector" "animate" "remove"
"webkitRequestFullScreen" "webkitRequestFullscreen" "querySelector"
"querySelectorAll" "hasChildNodes" "normalize" "cloneNode"
"isEqualNode" "compareDocumentPosition" "contains" "lookupPrefix"
"lookupNamespaceURI" "isDefaultNamespace" "insertBefore" "appendChild"
"replaceChild" "removeChild" "isSameNode" "addEventListener"
"removeEventListener" "dispatchEvent" "
如果您使用的是 PhantomJS 1.x,则支持 click()
,但仅支持 <input>
和 <button>
元素。有关详细信息,请参阅 MDN。请注意,PhantomJS 1.x 与 Chrome 13 相当,并且在 Chrome 20.
中引入了对 click()
的完全支持
此支持已扩展到 PhantomJS 2 中的所有元素类型,因为它在幕后有一个 。
要么使用 CasperJS' click()
:
casper.click(selector);
或 PhantomJS 的众多解决方法之一:PhantomJS; click an element
与 CasperJS 相比,我在 Chrome 控制台的 DOM 元素上看到了不同的方法。我有以下内容 运行
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
var url = 'http://casperjs.org/';
casper.start(url, function() {
this.echo('sdfsdf');
});
casper.then(function() {
var link = this.evaluate(function() {
var b = document.querySelector(".page-header");
var s = "";
for (var m in b) {
if (typeof b[m] === 'function') {
s += JSON.stringify(m) + " ";
}
}
return s;
});
console.log(link);
});
casper.run();
产生
"children" "childNodes" "insertAdjacentElement" "insertAdjacentHTML" "insertAdjacentText" "setAttribute" "getElementsByTagName" "getAttribute" "querySelectorAll" "webkitMatchesSelector" "getElementsByClassName" "contains" "getBoundingClientRect" "removeAttribute" "querySelector" "hasAttribute" "getAttributeNode" "getAttributeNS" "getElementsByTagNameNS" "removeAttributeNS" "getClientRects" "scrollByPages" "setAttributeNode" "setAttributeNS" "hasAttributeNS" "blur" "scrollIntoViewIfNeeded" "scrollByLines" "setAttributeNodeNS" "removeAttributeNode" "getAttributeNodeNS" "focus" "scrollIntoView" "addEventListener" "appendChild" "cloneNode" "removeChild" "removeEventListener" "compareDocumentPosition" "insertBefore" "hasAttributes" "isSupported" "isEqualNode" "dispatchEvent" "isDefaultNamespace" "hasChildNodes" "normalize" "replaceChild" "isSameNode" "lookupPrefix" "lookupNamespaceURI"
另一方面,如果我 运行 在 Chrome 的控制台中输入以下代码
var b = document.querySelector(".page-header");
var s = "";
for (var m in b) {
if (typeof b[m] === 'function') {
s += JSON.stringify(m) + " ";
}
}
我得到以下信息。为什么缺少 CasperJS click
?
""click" "focus" "blur" "hasAttributes" "getAttribute" "getAttributeNS" "setAttribute" "setAttributeNS" "removeAttribute" "removeAttributeNS" "hasAttribute" "hasAttributeNS" "getAttributeNode" "getAttributeNodeNS" "setAttributeNode" "setAttributeNodeNS" "removeAttributeNode" "closest" "matches" "getElementsByTagName" "getElementsByTagNameNS" "getElementsByClassName" "insertAdjacentHTML" "createShadowRoot" "getDestinationInsertionPoints" "requestPointerLock" "getClientRects" "getBoundingClientRect" "scrollIntoView" "insertAdjacentElement" "insertAdjacentText" "scrollIntoViewIfNeeded" "webkitMatchesSelector" "animate" "remove" "webkitRequestFullScreen" "webkitRequestFullscreen" "querySelector" "querySelectorAll" "hasChildNodes" "normalize" "cloneNode" "isEqualNode" "compareDocumentPosition" "contains" "lookupPrefix" "lookupNamespaceURI" "isDefaultNamespace" "insertBefore" "appendChild" "replaceChild" "removeChild" "isSameNode" "addEventListener" "removeEventListener" "dispatchEvent" "
如果您使用的是 PhantomJS 1.x,则支持 click()
,但仅支持 <input>
和 <button>
元素。有关详细信息,请参阅 MDN。请注意,PhantomJS 1.x 与 Chrome 13 相当,并且在 Chrome 20.
click()
的完全支持
此支持已扩展到 PhantomJS 2 中的所有元素类型,因为它在幕后有一个
要么使用 CasperJS' click()
:
casper.click(selector);
或 PhantomJS 的众多解决方法之一:PhantomJS; click an element