如果我有这个:
<video data-autostart="false" data-src="http://example.com/1.mp4">
我收到以下错误:
TypeError: undefined is not an object
下面是我的 JavaScript 代码:
var page = require( 'webpage' ).create();
var url = 'http://example.com/';
page.open(url, function( status ) {
if ( status === 'success' ) {
page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js', function() {
var link = page.evaluate(function() {
return $( 'video[data-autostart="false"]' ).attr( 'data-src' );
});
console.log( link );
phantom.exit();
});
} else {
console.log( 'FAIL' );
}
});
我做错了什么以及如何解决它?
最佳答案
您几乎所做的一切都是正确的,但是当您在脚本中访问它时,您正在寻找的元素显然不存在。
因此错误,undefined is not an object。您尝试访问的元素未定义,不存在。
您可以在访问元素之前检查它是否存在:
var link = page.evaluate(function() {
if($( 'video[data-autostart="false"]' ).length != 0)
{
return $( 'video[data-autostart="false"]' ).attr( 'data-src' );
}
else
{
return false;
}
});
if (link === false) {
console.log("Video not found!");
phantom.exit(1); // Error exit code
}
完整的工作示例:
var url = "http://html5demos.com/video";
var page = require( 'webpage' ).create();
page.open(url, function( status ) {
if ( status === 'success' ) {
page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js', function() {
var link = page.evaluate(function() {
if($( 'video' ).length != 0)
{
return $( 'video' ).attr('preload');
}
});
console.log( link );
phantom.exit();
});
} else {
console.log( 'FAIL' );
}
});
打印
metadata
关于javascript - PhantomJS 获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44472300/