2017-01-17 2 views
0

Ich versuche zu kratzen http://ventusky.com/. Wenn die Maus bewegt wird, werden einige Daten in der Nähe dieses Mauszeigers angezeigt. Ich benutze selenium. Wenn ich die Browser-Konsole anschaue, kann ich sehen, dass der Ereignis-Listener mousemove diese Daten hinzufügt. Mein Code.Scraping ein Dom-Element mit der Mausbewegung

test = driver.find_element(:id,"h") 
driver.action.move_to(test, 100, 100).perform 
elem=wait.until{driver.find_element(:class,"yy")} 
puts elem.attribute "outerHTML" 

Aber ich bekomme keine Daten vom Element elem. Sein text ist leer. Ich sehe nichts, was im Browser passiert, auch wenn das Skript ausgeführt wird. Kann mir jemand helfen, dieses Problem zu lösen? Ich bin ziemlich neu beim Verschrotten.

Ich benutze ruby, obwohl es egal ist. Ich kann das Rubinäquivalent finden.

Antwort

0

Sie verpassen einen Schlaf vor dem Befehl zum Verschieben. Diese Seite benötigt Zeit zum Laden. Sie können also entweder finished_loading_elem=wait.until{driver.find_element(:id,"z")} hinzufügen oder eine implizite Wartezeit wie Thread.Sleep in anderen Sprachen hinzufügen.

Auch, ich schlage vor, verschieben Sie wie 250, 250 Offset, weil 100,100 auf die Suchleiste fallen könnte.

+0

Ich habe versucht, Coords zu ändern und hinzugefügt warten, aber es ist das gleiche. Aber '' mousemove'' Event-Listener wird nicht aufgerufen. – raj

+0

Sind Sie sicher, dass die Mausaktion nach dem Laden der Seite ausgeführt wurde? – Moshisho

+0

Ich habe das Problem hier verstanden. Wenn Sie die Website besuchen und auf einen beliebigen Punkt klicken, wird ein neues "div" mit dem Ort des Punktes hinzugefügt. wenn ich noch einmal klicke. es verschwindet. Der nächste Klick aus irgendeinem Grund fügt nicht das '' div'' hinzu. Es wird Zeit überschritten, da es das Element nicht finden kann. – raj