2016-04-20 4 views
0

Ich verwende Nodejs und npm Modul Phantom eine Webseite zu verschrotten. Die Informationen, die ich brauche, werden mit einer Ajax-Anfrage platziert, wenn ein Bereich angeklickt wird.Klicken Sie nicht auf Element in Phantom

Ziel: In site 'www.academiadasapostas.com/stats/team/961#tab=t_stats' ich in 'Bundesliga' klicken mag Schaltfläche Info verschrotten.

Problem: Ich kann nicht direkt an Taste url gehen (www.academiadasapostas.com/stats/team/961#tab=t_stats & team_id = 961 & competition_id = 9 & page = 1) und I don Ich weiß nicht, wie man in Phantom auf den Button klickt.

Mein Code:

var url = 'https://www.academiadasapostas.com/stats/team/961#tab=t_stats'; 
phantomInstance.createPage() 
    .then((page) => { 
     phantomPage = page; 
     return page.open(url); 
    }) 
    .then((status) => { 
     phantomPage.evaluate(function() { 
      //trying click 
      return document.querySelectorAll('[data-id]')[1].click(); 
     }) 
     .then(function(){ 
      return phantomPage.property('content'); 
     }) 
     .then((content) => { 
      // handle content of page 
     }); 
    }); 

HTML-Snapshot:

<td> 
    <span class="competition all " data-id="0" onclick="teamAjax_Filterchange(this)" style="float: left; display: none;">Tudo 
    </span> 
    <span class="competition " data-id="9" onclick="teamAjax_Filterchange(this)">         
     <ul class="flag" title=""><li class="ar a80" title=""></li><li class="co c1"></li><li class="co chover"></li></ul>Bundesliga 
    </span> 
    <span class="competition " data-id="10" onclick="teamAjax_Filterchange(this)">          
     <ul class="flag" title=""><li class="ar a7" title=""></li><li class="co clc"></li><li class="co chover"></li></ul>UEFA Champions League 
    </span> 
</td> 

EDIT 1: ich dies versuchen, aber die Arbeit scheint nicht zu:

phantomPage.evaluate(function() { 
    var ev = document.createEvent("MouseEvent"); 
    ev.initMouseEvent(
     "click", 
     true /* bubble */, true /* cancelable */, 
     window, null, 
     0, 0, 0, 0, /* coordinates */ 
     false, false, false, false, /* modifier keys */ 
     0 /*left*/, null 
    ); 
    return document.querySelectorAll('[data-id]')[1].dispatchEvent(ev); 
}) 
+0

Haben Sie die Vorschläge in [dieser Frage] (http://stackoverflow.com/q/15739263/1816580) versucht? Sie müssten sie so portieren, wie es für die Bridge geschrieben ist. –

+0

Ja, ich versuche die dispatchEvent suggestion, aber es scheint nicht funktioniert auch. (Neuer Code: EDIT 1) –

Antwort

0

konnte ich die Seite mit dem folgenden Code mit Python und PhantomJS kratzen:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from bs4 import BeautifulSoup 

url = 'https://www.academiadasapostas.com/stats/team/961#tab=t_stats&team_id=961' 
driver = webdriver.PhantomJS() 
driver.set_window_size(1024, 768) 

xpath_IN = ".//*[@id='s']/div/div/div/div/div[2]/div/div[3]/div/table/tbody/tr[1]/td[2]/span[2]" 
driver.get(url) 

WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.XPATH, xpath_IN))) 
driver.find_element_by_xpath(xpath_IN).click() 

xpath_IN = ".//*[@id='s']/div/div/div/div/div[2]/div/div[3]/table[2]/tbody/tr[19]/td[1]" 
WebDriverWait(driver, 40).until(EC.presence_of_element_located((By.XPATH, xpath_IN))) 

soup = BeautifulSoup(driver.page_source, 'lxml') 
f = open('temp.txt', 'w') 
f.write(soup.prettify()) 
f.close() 

driver.close() 

habe ich die XPath-Bundesliga-Taste auf ihn zu suchen und klicken. Dann habe ich den Pfad xpath erneut für die letzte Zeile verwendet, die erscheint, nachdem der Klick erfolgreich war (Cartoes Vermelhos). Dies wurde gemacht, um auf das Laden aller Elemente nach dem Klick zu warten.

Ich benutzte BeautifulSoup, um diese Seite zu lesen und sie "hübsch" zu drucken, um zu bestätigen, dass alles ok geladen hatte.

Wenn Sie mit xpath nicht vertraut sind, installieren Sie die Firebug- und firepath-Addons in Firefox, und Sie können den xpath erhalten, indem Sie mit der rechten Maustaste auf das Element klicken, für das Sie es erhalten möchten.

Hoffe, das hilft.