2016-11-01 3 views
1

Мне нужно прокрутить веб-страницу (пример twitter), сделать веб-очистку новых элементов, которые появляются как один продвигается на веб-сайте. Я пытаюсь сделать это, используя python 3.x, selenium и PhantomJS. Это мой кодПрокрутите страницу, используя phatomJS и селен

import time 
from selenium import webdriver 
from bs4 import BeautifulSoup 

user = 'ciroylospersas' 
# Start web browser 
#browser = webdriver.Firefox() 
browser = webdriver.PhantomJS() 
browser.set_window_size(1024, 768) 
browser.get("https://twitter.com/") 

# Fill username in login 
element = browser.find_element_by_id("signin-email") 
element.clear() 
element.send_keys('your twitter user') 
# Fill password in login 
element = browser.find_element_by_id("signin-password") 
element.clear() 
element.send_keys('your twitter pass') 

browser.save_screenshot('screen.png') # save a screenshot to disk 

# Summit the login 
element.submit() 
time.sleep(5 

browser.save_screenshot('screen1.png') # save a screenshot to disk 
# Move to the following url 
browser.get("https://twitter.com/" + user + "/following") 
browser.save_screenshot('screen2.png') # save a screenshot to disk 

scroll_script = "var h = document.body.scrollHeight; window.scrollTo(0, h); return h;" 
newHeight = browser.execute_script(scroll_script) 
print(newHeight) 
browser.save_screenshot('screen3.png') # save a screenshot to disk 

Проблема в том, что я не могу прокрутить до конца. screen2.png и screen3.png являются одинаковыми. Но если я изменю webdriver от PhantomJS до Firefox, то тот же код работает нормально. Зачем?

+0

Вы можете добавить 'time.sleep()' после 'scroll_script'? Возможно, это нужно сделать после прокрутки. –

+0

Я пытаюсь использовать 'time.sleep (5)', но не работает. –

+0

Можете ли вы жестко указать высоту на '10000' и ​​посмотреть, прокручивается ли она? Установите 'scroll_script' как' window.scrollTo (0, 1000) 'и ничего больше. –

ответ

1

я смог получить эту работу в phantomJS при попытке решить подобную проблему:

check_height = driver.execute_script("return document.body.scrollHeight;") 
while True: 
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    time.sleep(5) 
    height = driver.execute_script("return document.body.scrollHeight;") 
    if height == check_height: 
     break 
    check_height = height 

Он будет прокручивать к текущей «снизу», ждать, увидеть, если страница загружена больше, и под залог если бы это не было (если все было загружено, если высота соответствует.)

В моем исходном коде у меня было значение «max», которое я проверил рядом с соответствующими высотами, потому что меня интересовали только первые 10 или около того «страниц», , Если бы было больше, я бы хотел, чтобы он остановил загрузку и пропустил их.

Кроме того, это ответ, который я использовал в качестве example

+1

Отличное решение. Должен быть обновлен в какой-то момент, хотя в двух из трех исполняемых команд не хватает точки с запятой в конце. Если вы приедете сюда и не знаете много о javascript, который, вероятно, займет некоторое время, чтобы разобраться по своему усмотрению. – jlaur

+1

хорошо пункт, исправно. – jinksPadlock