使用phantomjs webdriverwait抓取无限滚动网站意外地引发超时异常

时间:2015-06-25 22:30:40

标签: python selenium xpath selenium-webdriver phantomjs

我正在尝试使用无限滚动来抓取使用selenium和phantomjs加载新产品的网页。我知道每页上的产品总数,并且在滚动页面时它们加载21。我的方法如下

driver = webdriver.PhantomJS()
driver.get(response.url)

scrolls_needed = (int(response.xpath("//div[@class='count-text']/span/text()")[0].extract()) / self.PRODUCTS_PER_PAGE) + 1
for i in xrange(scrolls_needed):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    elem = WebDriverWait(driver, 10).until(lambda x:    len(x.find_elements_by_xpath("//li[contains(@id, 'divPictureAndPrices')]")) == self.PRODUCTS_PER_PAGE * (i+1))

我只是等到匹配我的xpath的已加载项目的数量等于i * PRODUCTS_PER_PAGE。此方法适用于除最后一次之外的所有迭代。在最后一次迭代中,until()调用内的相等条件永远不会匹配,这会导致TimeoutException。

如果有人解释我怎么能处理这个错误,我将不胜感激

1 个答案:

答案 0 :(得分:0)

根据我的理解,只需将预期条件更改为:

lambda x: len(x.find_elements_by_xpath("//li[contains(@id, 'divPictureAndPrices')]")) >= self.PRODUCTS_PER_PAGE * (i+1)

应该这样做。