Scrapy PhantomJs慢了linux

时间:2015-03-27 17:20:16

标签: python selenium scrapy phantomjs

我正在尝试从我的linux机器上的this页面抓取内容。我想通过单击show more按钮[大约600]显示所有葡萄酒列表,直到没有显示更多按钮。我正在使用seleniumPhantomJS来处理javascripts。我正在使用time.sleep()显示,一旦我点击show more按钮,它会暂停一段时间,直到另一个出现。我面临的问题是,程序最初会快速点击显示更多按钮,但一旦达到大约100-150次点击,检测show more按钮所需的时间会以惊人的速度增加,花费太多时间。以下是检测show more按钮并单击它的代码。

    def parse(self,response):

     sel = Selector(self.driver.get(response.url))

     self.driver.get(response.url)
     click = self.driver.find_elements_by_xpath("//*[@id='btn-more-wines']")

     try:
        while click:
            click[0].click()
            time.sleep(2)
     except Exception:
        print 'no clicks'

1 个答案:

答案 0 :(得分:1)

Explicit Wait(而不是time.sleep())可以在此产生积极影响:

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)
click = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='btn-more-wines']")))

这基本上等待“显示更多”按钮变为可点击。


通过在无头模式下切换到Chrome(使用虚拟显示器)可以实现另一种可能的改进: