我正在尝试从我的linux机器上的this页面抓取内容。我想通过单击show more
按钮[大约600]显示所有葡萄酒列表,直到没有显示更多按钮。我正在使用selenium
和PhantomJS
来处理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'
答案 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(使用虚拟显示器)可以实现另一种可能的改进: