phantomjs click在一个链接上工作,但在同一页面中不是另一个链接

时间:2017-07-23 10:24:25

标签: javascript dom 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();


});

输出看起来像 this

即使关键字菜单应该被切换,也不是。

我确信代码正常运行,因为当我点击页面顶部的链接时,我可以在屏幕截图中看到它们已被点击。

这是page link

我做错了什么?

1 个答案:

答案 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)
})