2014-09-16 15 views
5

Tôi cạo trang web này cho tên người dùng mà tải người dùng sau khi di chuyểntrang web cuộn sử dụng selen python webdriver

Url to page: "http://www.quora.com/Kevin-Rose/followers"

tôi biết số lượng người dùng trên trang (trong này trường hợp không. là 43812) Làm cách nào để cuộn trang cho đến khi tất cả người dùng được tải? Tôi đã tìm kiếm giống nhau trên internet và ở khắp mọi nơi tôi đã gần như cùng một dòng mã để làm nó đó là:

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

Làm thế nào tôi có thể xác định vị trí thẳng đứng để đảm bảo rằng tất cả người dùng được tải? Có tùy chọn nào khác để đạt được điều tương tự mà không thực sự cuộn không?

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

Chắc chắn có các tùy chọn. Vui lòng hiển thị mã hoàn chỉnh bạn hiện có (bao gồm cả phần cuộn). Cảm ơn. – alecxe

+0

Tôi không nghĩ rằng nó sử dụng bất kỳ nhưng tôi đã thêm mã. Đây chỉ là mã để đăng nhập vào trang web và điều hướng đến trang cụ thể. Tôi không biết phải thêm gì vào vị trí tọa độ y? – Siddhesh

Trả lời

4

Kể từ khi không có gì đặc biệt xuất hiện sau khi những người theo cuối cùng xô được nạp là, tôi sẽ dựa vào thực tế là bạn biết có bao nhiêu người theo không người dùng có và bạn biết có bao nhiêu được nạp vào mỗi cuộn xuống (tôi đã được kiểm tra - nó là 18 mỗi cuộn). Do đó, bạn có thể tính toán số lần bạn cần để cuộn trang xuống.

Đây là việc thực hiện (Tôi đã sử dụng một người dùng khác nhau với chỉ 53 người theo để chứng minh các giải pháp):

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) 

Ngoài ra, bạn có thể cần phải tăng 10000 Y giá trị toạ độ này dựa trên các biến vòng lặp trong trường hợp có một số lượng lớn người theo dõi.

+0

Cảm ơn rất nhiều !! Ngay bây giờ tôi đang thử kịch bản sau đây xuất hiện để làm việc hoàn hảo driver.execute_script ("window.scrollTo (0, document.body.scrollHeight);") – Siddhesh

+0

^Không. Mã mà tôi đã đề cập ở trên không tải tất cả người dùng. – Siddhesh

+0

@Siddhesh cảm ơn bạn vì một thử thách thú vị khác. Xin lỗi, tôi đã không nhận được - nó hoạt động cho bạn? – alecxe

Các vấn đề liên quan