2016-04-18 6 views
1

Ich habe den folgenden Code:Get dynamisch nachgeladen HTML Nach dem Scrollen zum Ende

import java.io.IOException; 

import com.machinepublishers.jbrowserdriver.JBrowserDriver; 
import com.machinepublishers.jbrowserdriver.Settings; 
import com.machinepublishers.jbrowserdriver.Timezone; 

public class ReadMovies { 

    public static void main(final String[] args) throws IOException { 
     final JBrowserDriver driver = new JBrowserDriver(Settings.builder().timezone(Timezone.AMERICA_NEWYORK).build()); 
     driver.get("http://www.cinesift.com/#/"); 

     driver.executeScript("window.scrollTo(0, document.body.scrollHeight)"); 

     System.out.println(driver.getPageSource()); 

     driver.quit(); 
    } 
} 

jedoch die executeScript() scheint keine Wirkung zu - das Programm noch druckt die ursprüngliche Quelle, wie wenn die Seite zuerst geladen (also wurden keine zusätzlichen Elemente geladen). Weiß jemand, was los ist?

Antwort

1

Beim Scrollen der Seite werden weitere Filme geladen. Wenn Sie alle oder eine bestimmte Anzahl von Filmen laden möchten, müssen Sie kontinuierlich nach unten scrollen und warten.

Naive Implementierung:

int DESIRED_COUNT = 100; 
int currentCount = driver.findElements(By.cssSelector("#films .film")).size(); 

while (currentCount < DESIRED_COUNT) { 
    driver.executeScript("window.scrollTo(0, document.body.scrollHeight)"); 
    Thread.sleep(1000); 
    currentCount = driver.findElements(By.cssSelector("#films .film")).size(); 
} 

// now get the page source 
System.out.println(driver.getPageSource()); 

Die Thread.sleep() warten sollte wahrscheinlich mit einer expliziten Warten über WebDriverWait ersetzt werden.

+0

Der Thread.sleep() war der Teil, den ich vermisste. Habe nicht bemerkt, dass ich dem Server wirklich Zeit geben muss, zu antworten :). Vielen Dank! –

+0

@JohnRoberts 'Thread.sleep()' sollte generell vermieden werden und stattdessen sollte 'WebDriverWait()' verwendet werden. Für diese Aufgabe denke ich, dass es ziemlich gut ist - wir haben eine erwartete Zustandsprüfung in der while-Schleife. – alecxe

+0

OK. Ich werde mir das merken. –

Verwandte Themen