我正试图用phantomjs抓一页。必须使用选项过滤列表,因此需要进行一些点击。
这是我的代码:
var page = require('webpage').create();
page.viewportSize = { width: 1024, height: 768 };
page.open('http://jobs.bdjobs.com/jobsearch.asp?fcatId=1&icatId=', function () {
var coords = page.evaluate(function () {
var firstlink = document.querySelectorAll('a.dropdown-toggle')[0];
return {x: firstlink.offsetLeft, y: firstlink.offsetTop};
});
page.sendEvent('click', coords.x + 1, coords.y + 1);
page.onConsoleMessage = function(msg) {console.log(msg);}
page.render('bdjobs.png');
phantom.exit();
});
输出看起来像 this
即使关键字菜单应该被切换,也不是。
我确信代码正常运行,因为当我点击页面顶部的链接时,我可以在屏幕截图中看到它们已被点击。
我做错了什么?
答案 0 :(得分:0)
问题#1使用offsetLeft& offsetTop确定单击的位置 - 这些属性描述项目相对于父项的位置,而不是视口。
问题#2在调用page.render
之前,等待事件没有等待足够长的时间试试这个 -
var page = require('webpage').create()
page.viewportSize = { width: 1024, height: 768 }
page.open('http://jobs.bdjobs.com/jobsearch.asp?fcatId=1&icatId=', function() {
var coords = page.evaluate(function() {
var rect = document
.querySelector('.dropdown-toggle i')
.getBoundingClientRect()
return { x: rect.left, y: rect.top }
})
page.sendEvent('click', coords.x, coords.y)
page.onConsoleMessage = function(msg) {
console.log(msg)
}
window.setTimeout(function() {
page.render('bdjobs.png')
phantom.exit()
}, 3000)
})