2014-09-16 19 views
5

ja skrobanie tę stronę do nazw użytkownika, które ładuje użytkowników po przewinięciuPrzewijanie strony internetowej przy użyciu selen python webdriver

Url do strony: „http://www.quora.com/Kevin-Rose/followers

Znam liczbę użytkowników na stronie (w tym numer sprawy to 43812) Jak przewinąć stronę do momentu załadowania wszystkich użytkowników? Szukałem na to samo w internecie i wszędzie mam prawie tej samej linii kodu, by to zrobić, który jest:

driver.execute_script („window.scrollTo (0)”)

Jak mogę określić pozycję pionową, aby upewnić się, że wszyscy użytkownicy są załadowani? Czy jest jakaś inna opcja, aby osiągnąć to samo bez przewijania?

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

Istnieją z pewnością opcje. Pokaż pełny kod, który posiadasz (w tym część przewijaną). Dzięki. – alecxe

+0

Nie sądzę, że jest to przydatne, ale dodałem kod. To jest po prostu kod do zalogowania się na stronie i nawigacji do konkretnej strony. Nie wiem, co dodać w pozycji współrzędnych y? – Siddhesh

Odpowiedz

4

Ponieważ nie ma nic specjalnego pojawiające się po ostatnich zwolenników wiadro jest załadowany, chciałbym powołać się na fakt, że wiesz, ilu zwolenników ma użytkownik ma i wiesz ile są ładowane na każdym Przewiń w dół (I "sprawdzono - to 18 na zwoju). W związku z tym można obliczyć, ile razy trzeba przewinąć stronę w dół.

Oto realizacja (Użyłem inny użytkownikowi jedynie 53 zwolenników wykazać rozwiązanie):

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) 

Ponadto, może być konieczne zwiększenie tej wartości 10000 współrzędna Y w oparciu o zmiennej pętli w sprawa jest duża liczba zwolenników.

+0

Wielkie dzięki! Teraz próbuję następujący skrypt, który wydaje się działać doskonale driver.execute_script ("window.scrollTo (0, document.body.scrollHeight);") – Siddhesh

+0

^Nie. Kod, o którym wspomniałem powyżej, nie załadował wszystkich użytkowników. – Siddhesh

+0

@Siddhesh dziękuję za kolejne ciekawe wyzwanie. Przepraszam, nie udało mi się uzyskać - czy to działa dla ciebie? – alecxe

Powiązane problemy