我正在尝试使用无限滚动来抓取使用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。
如果有人解释我怎么能处理这个错误,我将不胜感激
答案 0 :(得分:0)
根据我的理解,只需将预期条件更改为:
lambda x: len(x.find_elements_by_xpath("//li[contains(@id, 'divPictureAndPrices')]")) >= self.PRODUCTS_PER_PAGE * (i+1)
应该这样做。