2014-09-21 188 views
1

我正在使用Selenium,Python和PhantomJS編寫爬網程序來使用Google的反向圖像搜索。到目前爲止,我已經成功地上傳圖片並在第一頁上抓取搜索結果。但是,當我嘗試點擊搜索結果導航時,我收到一個StaleElementReferenceError。我在很多文章中已經閱讀過它,但仍然無法實施解決方案。這裏是破解的代碼:StaleElementReferenceException selenium webdriver python

ele7 = browser.find_element_by_id("nav") 
ele5 = ele7.find_elements_by_class_name("fl") 

count = 0 
for elem in ele5: 
    if count <= 2: 
     print str(elem.get_attribute("href")) 
     elem.click() 
     browser.implicitly_wait(20) 
     ele6 = browser.find_elements_by_class_name("rc") 
     for result in ele6: 
      f = result.find_elements_by_class_name("r") 
      for line in f: 
       link = line.find_elements_by_tag_name("a")[0].get_attribute("href") 
       links.append(link) 
       parsed_uri = urlparse(link) 
       domains.append('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)) 
      count += 1 

代碼在打印時打破str(elem.get_attribute("href"))。我該如何解決這個問題?

在此先感謝。

回答

2

點擊一個鏈接將導致瀏覽器轉到另一個頁面;引用舊頁面中的元素(ele5elem)無效。

修改代碼不引用無效元素。

ele7 = browser.find_element_by_id("nav") 
ele5 = ele7.find_elements_by_class_name("fl") 

urls = [elem.get_attribute('href') for elem in ele5] # <----- 

browser.implicitly_wait(20) 

for url in urls[:2]: # <------ 
    print url 
    browser.get(url) # <------ used `browser.get` instead of `click`. 
         #   ; using `element.click` will cause the error. 

    ele6 = browser.find_elements_by_class_name("rc") 
    for result in ele6: 
     f = result.find_elements_by_class_name("r") 
     for line in f: 
      link = line.find_elements_by_tag_name("a")[0].get_attribute("href") 
      links.append(link) 
      parsed_uri = urlparse(link) 
      domains.append('{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)) 

例如,您可以在訪問其他頁面之前得到的網址

相關問題