0
私はいくつかのニュース記事をpythonとphantomjsで読むことを試みています。 無限のスクロールを使用して作業しているウェブサイトは、スクロールするときに次の記事を動的に読み込みます。 HereはサンプルURLです。python selenium phantomjsエンドレススクロールは最初のページでしか動作しません。
もう1つの記事を読み込めるようにするには、以下のコードを使用して管理しましたが、もう1つだけです...誰もが無限に働かせるよう手助けできますか?または何が間違っているかのヒントは、改善することができますか? ありがとうございました!
from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep
from selenium.webdriver.common.proxy import *
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# Pretend to be chrome
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 "
"(KHTML, like Gecko) Chrome/15.0.87"
)
driver = webdriver.PhantomJS(desired_capabilities=dcap)
driver.set_window_size(1120, 550)
## GET
driver.get("https://www.bloomberg.com/news/features/2017-06-08/no-one-has-ever-made-a-corruption-machine-like-this-one")
# print current scrollTop
driver.execute_script('return document.body.scrollTop')
# out: 0
# print current scrollHeight
driver.execute_script('return document.body.scrollHeight')
# out: 18255
# scroll to bottom
driver.execute_script("window.scrollTo(0, 18255)")
# print current scrollTop
driver.execute_script('return document.body.scrollTop')
# out: 17705
# print current scrollHeight
driver.execute_script('return document.body.scrollHeight')
# out: 29050
# It works! Great!
# Scroll to bottom again
driver.execute_script("window.scrollTo(0, 29050)")
# print current scrollTop
driver.execute_script('return document.body.scrollTop')
# out: 28500
# print current scrollHeight
driver.execute_script('return document.body.scrollHeight')
# out: 29050
# It's still the same, no matter how hard I try, it cannot load more...
# According to tolmachofof's suggestion below, I tried to scroll very slowly, still no luck. :<
top = driver.execute_script('return document.body.scrollTop')
height = driver.execute_script('return document.body.scrollHeight')
for i in range(top, height, 100):
driver.execute_script("window.scrollTo(0," + str(i) + ")")
print(driver.execute_script('return document.body.scrollTop'))
sleep(0.2)
私の質問を読んで、私はそれをスクロールすることができますが、なぜそれが最初のページでのみ機能するのか分かりません... – Student222
スクロールは非常に高速です。私は一度同じ問題を抱えていた。このソリューションは、スクロールのスピードを落とすことで、無限に改ページするのに役立ちました。 – tolmachofof
ゆっくりとスクロールしようとしました。まだ動作しません... – Student222