2014-09-16 14 views
5

मैं जो स्क्रॉल पृष्ठ परस्क्रॉल वेब पेज सेलेनियम का उपयोग कर अजगर webdriver

यूआरएल के बाद उन लोड करता है उपयोगकर्ता नाम के लिए इस वेबपेज scraping कर रहा हूँ: इस में "http://www.quora.com/Kevin-Rose/followers"

मैं पेज पर उपयोगकर्ताओं की संख्या पता (केस संख्या 43812 है) जब तक सभी उपयोगकर्ता लोड नहीं हो जाते हैं, मैं पृष्ठ को कैसे स्क्रॉल कर सकता हूं? मैं इंटरनेट पर उसी के लिए खोज की है और हर जगह मैं इसे करने के लिए कोड का लगभग एक ही लाइन मिल गया है: कैसे कर सकते हैं

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

मैं यह सुनिश्चित करने के लिए लंबवत स्थिति निर्धारित करें कि सभी उपयोगकर्ता लोड हो गए हैं? क्या वास्तव में स्क्रॉल किए बिना वही चीज़ हासिल करने का कोई अन्य विकल्प है?

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

निश्चित रूप से विकल्प हैं। कृपया अब पूरा कोड दिखाएं (स्क्रॉलिंग भाग सहित)। धन्यवाद। – alecxe

+0

मैं इसे किसी भी उपयोग के बारे में नहीं सोचता लेकिन मैंने कोड जोड़ा है। यह साइट पर लॉग इन करने और विशेष पृष्ठ पर नेविगेट करने के लिए सिर्फ कोड है। मैं नहीं जानता कि y समन्वय स्थिति में क्या जोड़ना है? – Siddhesh

उत्तर

4

के बाद से वहाँ कुछ खास नहीं पिछले अनुयायियों बाल्टी भरी हुई है के बाद दिखाया जा रहा है, मैं सच है कि आप जानते हैं कि कैसे कई अनुयायियों उपयोगकर्ता है और आप जानते हैं कि कितने प्रत्येक नीचे स्क्रॉल (मैं पर लोड होते हैं पर निर्भर करेगा निरीक्षण किया गया है - यह प्रति स्क्रॉल 18 है)। इसलिए, आप गणना कर सकते हैं कि पृष्ठ को नीचे स्क्रॉल करने के लिए आपको कितनी बार आवश्यकता है।

यहाँ कार्यान्वयन है (मैं केवल 53 अनुयायियों के साथ एक अलग उपयोगकर्ता का उपयोग किया है समाधान प्रदर्शित करने के लिए):

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) 

इसके अलावा, आप इस 10000 वाई समन्वय में पाश चर के आधार मूल्य में वृद्धि करने की आवश्यकता हो सकती मामले में अनुयायियों की एक बड़ी संख्या है।

+0

बहुत बहुत धन्यवाद !! अभी मैं निम्नलिखित स्क्रिप्ट का प्रयास कर रहा हूं जो पूरी तरह से driver.execute_script ("window.scrollTo (0, document.body.scrollHeight);") – Siddhesh

+0

^नहीं। जिस कोड का मैंने ऊपर उल्लेख किया है वह सभी उपयोगकर्ताओं को लोड नहीं करता है। – Siddhesh

+0

@ सिद्धेश एक और दिलचस्प चुनौती के लिए धन्यवाद। क्षमा करें, मुझे काफी नहीं मिला - क्या यह आपके लिए काम करता है? – alecxe

संबंधित मुद्दे