2014-09-16 85 views
5

ben sayfayaKaydırma web sayfası kullanılarak selenyum piton webdriver

Url kaydırma sonra kullanıcıları yükler kullanıcı isimleri için bu web sayfasını kazıma am: bu "http://www.quora.com/Kevin-Rose/followers"

Ben sayfadaki kullanıcı sayısını bilmek (Durum No 43812) Tüm kullanıcılar yüklenene kadar sayfayı nasıl kaydırabilirim? internette aynı aramış ve her yerde ben hangi bunu yapmak için kod hemen hemen aynı çizgi var:

driver.execute_script ("window.scrollTo (0)")

nasıl I Tüm kullanıcıların yüklendiğinden emin olmak için dikey konumu belirleyin. Gerçekte kaydırma yapmadan aynı şeyi elde etmek için başka bir seçenek var mı?

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

Kesinlikle seçenekler var. Lütfen şimdi sahip olduğunuz kodun tamamını (kaydırma kısmı dahil) gösterin. Teşekkürler. – alecxe

+0

Onun herhangi bir kullanım olduğunu düşünmüyorum ama kodu ekledim. Bu sadece siteye giriş yapmak ve belirli bir sayfaya gitmek için kod. Y koordinat pozisyonuna ne ekleyeceğimi bilmiyorum? – Siddhesh

cevap

4

kova yüklendikten son takipçileri sonra görünen özel bir şey olmadığı için, sana kullanıcı var kaç takipçileri olduğunu ve her bir (aşağı kaydırma I yüklenen kaç biliyor gerçeği itimat ediyorum denetlendi - kaydırma başına 18'dir). Bu nedenle, sayfayı aşağı kaydırmak için kaç kez ihtiyacınız olduğunu hesaplayabilirsiniz. İşte

(Ben çözümü göstermek için sadece 53 takipçileri ile farklı bir kullanıcı kullandım) uygulaması var: Ayrıca

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) 

, sen döngü değişkeni dayalı bu 10000 Y koordinatı değerini artırmak gerekebilir Durumda çok sayıda takipçi var.

+0

Çok teşekkürler! Şu anda, driver.execute_script ("window.scrollTo (0, document.body.scrollHeight);") – Siddhesh

+0

^Nope. Yukarıda bahsettiğim kod, tüm kullanıcıları yüklemedi. – Siddhesh

+0

@Siddhesh başka ilginç bir sorun için teşekkür ederiz. Üzgünüm, tam olarak anlamadım - işe yarıyor mu? – alecxe

İlgili konular