2015-10-04 24 views
2

大家好我试图从https://answers.yahoo.com/dir/index/discover?sid=396545663停止与硒滚动的动态页面在Python

使用硒和scrapy刮了一些资料,我尝试不同的方法,我用硒和设置PhantomJs类似驱动程序。 对于向下滚动页面,这是一个无限滚动页面,我用这个指令:

elem.send_keys(Keys.PAGE_DOWN) 

为了模拟Page Down键按下按钮,而不是JavaScript函数:

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

因为这一个“似乎”在页面中加载较少的元素。

主要问题是我如何知道我何时到达页面底部?是“无限滚动”页面,所以我不知道什么时候结束我需要向下滚动,但我没有任何元素在底部分析。

其实我使用的是暂时的循环,但看起来很蠢。

感谢

回答

1

我实际上会寻找“加载...”指标。 Wait for it在每次滚动时都可见,但是如果您将得到一个TimeoutException - 这次没有加载指示器,并且没有更多项目要加载。

样品实施:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver, 10) 

while True: 
    # do the scrolling 
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") 

    try: 
     wait.until(EC.visibility_of_element_located((By.XPATH, "//*[. = 'Loading...']"))) 
    except TimeoutException: 
     break # not more posts were loaded - exit the loop 

未经测试。

+0

感谢您的支持,但雅虎没有这种图标或任何加载指标。 – RedVelvet

+1

@RedVelvet它在底部滚动时查找出现的“Loading ...”元素,它具有id =“ya-infinite-scroll-message”和“Loading ...”文本。 – alecxe

+0

谢谢@alecxe我使用wait.until(EC.visibility_of_element_located((By.ID,“ya-infinite-scroll-message”))),它工作,但他停止后80个问题......这很奇怪。 – RedVelvet

0

作为例子,你可以创建一些并行线程的女巫将检查页面Ajax请求。如果请求之间的时间多于10秒 - 那么您在页面末尾。没有其他的想法。