2017-04-06 84 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」]')))'。 –