2016-11-01 3 views
1

ウェブページ上をスクロールして、新しい要素をウェブ上でスクラップする必要があります。私はこれをpython 3.x,seleniumPhantomJSを使って作ろうとしています。これは私のコードです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.pngscreen3.pngは同じです。しかし、webdriverPhantomJSからFirefoxに変更すると、同じコードが正常に動作します。どうして?

+0

として使用答えは?スクロール後にレンダリングする必要があるかもしれません。 –

+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 

それは、現在の「底」までスクロール待って、ページがより読み込まかどうかを確認し、保釈されます

私のオリジナルコードでは、最初の10ページ程度しか興味がなかったので、マッチングの高さと一緒にチェックしました。 。それ以上あれば、読み込みをやめてスキップしてほしいと思っていました。

はまた、これはあなたの `scroll_script`後` time.sleepを() `を追加することができます私はexample

+1

すばらしい解決策。 3つの実行文のうち2つが最後にセミコロンを持たないため、ある時点で更新する必要があります。あなたがここに到着し、おそらくあなた自身の上に把握するためにあなたを取るjavascriptについて多くを知らない場合。 – jlaur

+1

良い点、固定。 – jinksPadlock

関連する問題