gpt4 book ai didi

javascript - 使用 CasperJS 的 getElementByXPath 根据变量在页面上查找元素

转载 作者:行者123 更新时间:2023-11-30 16:56:27 27 4
gpt4 key购买 nike

我在使用带有可变 xpath 参数的 __utils__.getElementByXPath() 时遇到问题,请参见示例:

licid 在脚本的 cli 执行时作为 argv (--licid=FAT32) 给出,并从 CasperJS 正确确认。

casper.then(function() {
var xpath_lic = '//*[contains(text(), "' + casper.cli.get("licid") + '")]';
this.echo('searching for...' + xpath_lic);
var found = this.evaluate(function() {
return __utils__.getElementByXPath(xpath_lic);
});
if (found) {
this.echo('Lic found');
}
else {
this.echo('Lic not found');
}
});

上面的代码总是打印出“Lic not found”!但是当我更改返回行时:

return __utils__.getElementByXPath('//*[contains(text(), "FAT32")]');

这会给我“找到许可证”,这是正确的!

我如何使用 __utils__.getElementByXPath() 中的 licid 来使该行更通用?

最佳答案

casper.evaluate()是沙盒页面上下文(源自 PhantomJS' page.evaluate() )。它无权访问在其外部定义的变量。你必须明确地传递它们:

var xpath_lic = '//*[contains(text(), "' + casper.cli.get("licid") + '")]';
var found = this.evaluate(function(xp) {
return !!__utils__.getElementByXPath(xp); // convert to boolean with `!!`
}, xpath_lic);

您不能将 DOM 节点传递到页面上下文之外,因此您需要像 element.textContent 那样获取它们的表示,或者完全在页面上下文中工作。

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!

关于javascript - 使用 CasperJS 的 getElementByXPath 根据变量在页面上查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com