2014-09-16 11 views
5

ich diese Webseite für Benutzernamen Schaben, die die Nutzer lädt nachScrolling Web-Seite mit Selen Python WebDriver

Url Seite scrollen: „http://www.quora.com/Kevin-Rose/followers

Ich weiß, dass die Anzahl der Benutzer auf der Seite (in diesem Fall Nr. ist 43812) Wie kann ich die Seite scrollen, bis alle Benutzer geladen sind? Ich habe für das gleiche im Internet gesucht und überall habe ich fast die gleiche Code-Zeile, es zu tun, das ist:

driver.execute_script („window.scrollTo (0,)“)

Wie kann ich Bestimmen Sie die vertikale Position, um sicherzustellen, dass alle Benutzer geladen sind? Gibt es eine andere Option, um dasselbe zu erreichen, ohne tatsächlich zu scrollen?

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
import time 
import urllib 

driver = webdriver.Firefox() 
driver.get('http://www.quora.com/') 
time.sleep(10) 

wait = WebDriverWait(driver, 10) 

form = driver.find_element_by_class_name('regular_login') 
time.sleep(10) 
#add explicit wait 

username = form.find_element_by_name('email') 
time.sleep(10) 
#add explicit wait 

username.send_keys('[email protected]') 
time.sleep(30) 
#add explicit wait 

password = form.find_element_by_name('password') 
time.sleep(30) 
#add explicit wait 

password.send_keys('def') 
#add explicit wait 

password.send_keys(Keys.RETURN) 
time.sleep(30) 

#search = driver.find_element_by_name('search_input') 
search = wait.until(EC.presence_of_element_located((By.XPATH, "//form[@name='search_form']//input[@name='search_input']"))) 

search.clear() 
search.send_keys('Kevin Rose') 
search.send_keys(Keys.RETURN) 

link = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Kevin Rose"))) 
link.click() 
#Wait till the element is loaded (Asynchronusly loaded webpage) 

handle = driver.window_handles 
driver.switch_to.window(handle[1]) 
#switch to new window 

element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Followers"))) 
element.click() 
+0

Es gibt sicherlich Optionen. Bitte zeigen Sie den vollständigen Code, den Sie jetzt haben (einschließlich Scrollteil). Vielen Dank. – alecxe

+0

Ich denke, es ist nicht von Nutzen, aber ich habe den Code hinzugefügt. Dies ist nur Code, um sich auf der Site anzumelden und zu einer bestimmten Seite zu navigieren. Ich weiß nicht, was ich in der Koordinatenposition hinzufügen soll. – Siddhesh

Antwort

4

Da gibt es nichts Besonderes erscheinen, nachdem die letzten Anhänger Eimer geladen ist, würde ich auf die Tatsache verlassen, dass Sie wissen, wie viele Anhänger hat der Benutzer, und Sie wissen, wie viele sind auf jeder (I nach unten scrollen geladen habe inspiziert - es ist 18 pro Rolle). Daher können Sie berechnen, wie oft Sie die Seite nach unten scrollen müssen.

Hier ist die Implementierung (ich einen anderen Benutzer mit nur 53 Anhängern verwendet habe, um die Lösung zu demonstrieren):

import time 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

followers_per_page = 18 

driver = webdriver.Chrome() # webdriver.Firefox() in your case 
driver.get("http://www.quora.com/Andrew-Delikat/followers") 

# get the followers count 
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, '//li[contains(@class, "FollowersNavItem")]//span[@class="profile_count"]'))) 
followers_count = int(element.text.replace(',', '')) 
print followers_count 

# scroll down the page iteratively with a delay 
for _ in xrange(0, followers_count/followers_per_page + 1): 
    driver.execute_script("window.scrollTo(0, 10000);") 
    time.sleep(2) 

Auch Sie diesen 10000 Y-Wert auf den Schleifenvariablen basierend Koordinate erhöhen müssen möglicherweise in Fall, es gibt eine große Anzahl von Anhängern.

+0

Vielen Dank !! Im Moment versuche ich das folgende Skript, das perfekt funktioniert. Driver.execute_script ("window.scrollTo (0, document.body.scrollHeight);") – Siddhesh

+0

^Nein. Code, den ich oben erwähnt habe, hat nicht alle Benutzer geladen. – Siddhesh

+0

@Siddhesh danke für die weitere interessante Herausforderung. Sorry, ich habe es nicht ganz verstanden - funktioniert es für dich? – alecxe