5

내가 페이지로스크롤 웹 페이지 사용 셀레늄 파이썬 webdriver

URL을 스크롤 한 사용자를로드 사용자 이름이 웹 페이지 긁어하고이에 "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

버킷로드 마지막 추종자 후에 나타나는 특별한 아무것도 없기 때문에, 당신이 사용자가 있는가 얼마나 많은 추종자 알고 각 (아래로 스크롤 I에로드 얼마나 많은 알고 있다는 사실에 의존하는 것 검사를 받았다 - 스크롤 당 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 Y 좌표 값을 늘려야 할 수 있습니다 큰 추종자가있는 경우.

+0

정말 고마워! 지금 당장 나는 완벽하게 작동하는 것으로 보이는 다음 스크립트를 시도하고 있습니다 .execute_script ("window.scrollTo (0, document.body.scrollHeight);") – Siddhesh

+0

^아니요. 위에서 언급 한 코드는 모든 사용자를로드하지 못했습니다. – Siddhesh

+0

@Siddhesh는 또 다른 흥미로운 도전에 대해 감사드립니다. 미안해, 나는 얻지 못했다 - 너에게 효과가 있니? – alecxe