我正试图抓住这一个(无限)页面(www.mydealz.de),但我无法让我的webdriver向下滚动页面。 我使用Python(3.5),Selenium(3.6)和PhantomJS。 我已经尝试了几种方法,但是webdriver只是不会滚动 - 它只是给了我第一页。
第一种方法(使用滚动方法):
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(1)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
第二种方法(只需按下向下键几次然后释放它,尝试在按下之间进行操作):
ActionChains(driver).key_down(Keys.ARROW_DOWN).perform()
ActionChains(driver).key_up(Keys.ARROW_DOWN).perform()
第3种方法(找到“滚动列表”中的最后一个元素并滚动到其视图以强制滚动):
posts = driver.find_elements_by_css_selector("div.threadGrid")
driver.execute_script("arguments[0].scrollIntoView();", posts[-1])
到目前为止没有任何工作,是否有人知道是否有其他方法或我犯了错误?
答案 0 :(得分:1)
比使用Selenium / PhantomJS方式更容易模仿浏览器的功能。如果你打开"网络" Chrome浏览器的开发人员工具中的标签,您会看到浏览器向https://www.mydealz.de/?page=2&ajax=true
发出请求以实现无限滚动。当我将请求复制为curl时,将其限制为将其引导至
curl 'https://www.mydealz.de/?page=2&ajax=true' -H 'x-requested-with: XMLHttpRequest'
将其转换为python脚本:
import json, requests
url = 'http://www.mydealz.de/'
headers = {'x-requested-with': 'XMLHttpRequest'}
for page in range(10):
params = dict(page=page, ajax='true')
resp = requests.get(url=url, params=params, headers=headers)
data = json.loads(resp.text)
html = data['data']['content']
# do something with html, maybe parse it with beautifulsoup
除了更简单的代码之外,它也会快得多。
答案 1 :(得分:0)
我可以在上述网站中看到1853页。所以你可以迭代一个循环,直到你到达最后一页。睡眠时间必须高于平均值以加载每页,尝试使用最少3,值越多,不加载数据的机会就越少。
stage
答案 2 :(得分:0)
要滚动浏览网页,直到the url is mydealz.de/?page=3
,您可以使用以下代码块:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=r'C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')
driver.set_window_size(1400,1000)
driver.get("https://www.mydealz.de")
while ("3" not in driver.current_url) :
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print(driver.current_url)
driver.quit()
控制台输出:
https://www.mydealz.de/?page=3