PythonでPhantomJSを使用して無限ページの下にスクロールする

PythonでPhantomJSを使用して無限ページの下にスクロールする image 2 Info

PythonでPhantomJSを使用して無限ページの下にスクロールする

タグ:


質問

私は以下の例のように、SeleniumとPhantomJSを使ってPythonを動的にロードする無限のスクロールページをリロードすることに成功しました。しかし、手動で多数の再ロードを設定する代わりに、ロックボトムに達するとプログラムが停止するように、これをどのように変更できますか?

reloads = 100000 #set the number of times to reload
pause = 0 #initial time interval between reloads
driver = webdriver.PhantomJS()

# Load Twitter page and click to view all results
driver.get(url)
driver.find_element_by_link_text(“All”).click()

# Keep reloading and pausing to reach the bottom
for _ in range(reloads):
driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)
time.sleep(pause)

text_file.write(driver.page_source.encode(“utf-8”))
text_file.close()

ベストアンサー

スクロールがすべてのステップで何かをしたかどうかを確認することができます。

PythonでPhantomJSを使用して無限ページの下にスクロールする image 1

lastHeight = driver.execute_script(“return document.body.scrollHeight”)
while True:
driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)
time.sleep(pause)
newHeight = driver.execute_script(“return document.body.scrollHeight”)
if newHeight == lastHeight:
break
lastHeight = newHeight

これは静的な待機量を使用します。これは、より速く終了したときに不要な待機をしたくないため、何らかの理由で動的ロードが遅すぎるとスクリプトが途中で終了することを望まないためです。

ページは通常、いくつかの要素をリストにロードするので、ロード前にリストの長さをチェックし、次の要素がロードされるまで待つことができます。

while True:
elemsCount = browser.execute_script(“return document.querySelectorAll(‘.stream-items > li.stream-item’).length”)

browser.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)

try:
WebDriverWait(browser, 20).until(
lambda x: x.find_element_by_xpath(
“//*[contains(@class,’stream-items’)]/li[contains(@class,’stream-item’)][“+str(elemsCount+1)+”]”))
except:
break

PhantomJS 1.xには:nth-child() CSSセレクタを使用するときにバグがあるため、XPath式を使用しました。

PythonでPhantomJSを使用して無限ページの下にスクロールする image 0

参照のためのフルバージョン。





source
ページの中央にスクロールすると無限のスクロール
ページを下にスクロールすると、ナビゲーションバーを下にスクロールするにはどうすればよいですか
無限のajaxスクロールページネーションループ
Pythonでの無限スクロールの背景
ページの一番下までjQueryスクロール
無限スクロールページのRedisページネーション戦略
Javascriptを使用してページの一番下までスクロールするときの決定
スペースバーを押すとページが下にスクロールしますか?
キュウリCapybaraはページの一番下までスクロールします
Bloggerで無限のスクロールページを作成するにはどうすればよいですか?
Rating