2017-04-06 108 views
0

我想用selenium和python来抓取一些数据。我有一个链接列表,我必须通过每个链接。我现在做的是以下几点:等待页面加载硒,Python。所有的页面都有相同的结构

for link in links: 
    self.page_driver.get(link) 
    time.sleep(5) 
    #scrape data 

它工作得很好,问题是,我有很多的联系,并等待5秒,每一个都是在浪费时间。这就是为什么我决定尝试的东西,如:

self.driver.get(link) 
try: 
    element_present = EC.presence_of_element_located((By.CLASS_NAME, 'cell-box')) 
    WebDriverWait(self.driver, 10).until(element_present) 
except TimeoutException: 
    logging.info("Timed out waiting for page to load") 

的问题是,每一个环节都具有完全相同的结构中,只有数据变化,所以元素被发现,即使页面没有改变。我想要做的是将产品名称保存在链接中的变量中,更改页面等到产品名称与保存的名称不同,这意味着新页面已加载。任何帮助将非常感激。

回答

0

您可以添加staleness_ofExpected Condition

wait = WebDriverWait(self.driver, 10) 
element = None 
for link in links: 
    self.page_driver.get(link) 
    if (element is not None): 
     wait.until(EC.staleness_of(element) 
    try: 
     element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'cell-box'))) 
    except TimeoutException: 
     logging.info("Timed out waiting for page to load") 

    #scrape data 
+0

我想你的解决方案,但'wait.until(EC.staleness_of(元)'引发TimeoutException异常。也许我做错了什么。我想这些页面到scrapy类似于这个:[链接](http://www.maijia.com/index.html#/shop/item/?itemId=45302792713)和我在里面的try语句:'element = wait.until (EC.presence_of_element_located((By.XPATH,'// * [@ id =“module-shop-item”]')))'。 –