Phantomjs 单击适用于一个链接,但不适用于同一页面中的另一个链接



我正在尝试用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();

});

输出看起来像 这

尽管应该切换关键字菜单,但事实并非如此。

我确定代码有效,因为当我单击页面顶部的链接时,我可以在屏幕截图中看到它们已被单击。

这是页面链接

我做错了什么?

问题#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)
})

最新更新