2017-07-23 2 views
1

Ich versuche, eine Seite mit phantomjs zu kratzen. Eine Liste muss mit Optionen gefiltert werden, so dass ein Klick beteiligt ist.phantomjs klick funktioniert auf einem Link, aber nicht auf einem anderen auf derselben Seite

mein Code hier:

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(); 


}); 

Die Ausgabe sieht aus wie this

Auch wenn die Keywords Menü umgeschaltet werden sollte, ist es nicht.

Ich bin mir sicher, dass der Code funktioniert, denn wenn ich auf die Links oben auf der Seite klicke, kann ich auf dem Screenshot sehen, dass sie angeklickt wurden.

Hier ist die page link

Was mache ich falsch?

Antwort

0

Problem # 1 Verwenden von offsetLeft & offsetTop, um die Position für den Klick zu bestimmen - diese Eigenschaften beschreiben die Position des Elements relativ zu seinem übergeordneten Element und nicht das Ansichtsfenster.

Problem # 2 nicht lange genug warten auf das Ereignis klicken, bevor Sie diese page.render

Versuchen Aufruf zu feuern -

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) 
}) 
Verwandte Themen