2017-08-19 20 views
0

我已經在下面的網址上運行一個python硒腳本時: -每次提取不同的數據運行的硒腳本

http://www.amazon.in/s/ref=sr_pg_1?sort=salesrank&ie=UTF8&rh=n%3A1571277031&page=1&unfiltered=1

,我想知道的每一個產品是否暢銷書或不。運行相同的腳本有時會得到正確的結果,而有時會得到不正確的結果。

這裏是我一直在努力代碼:

import sys 
import csv 
import os 
import time 
import urllib 

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.action_chains import ActionChains 

count = 1; 
serviceurl = 'http://www.amazon.in/s/ref=sr_pg_1?' 
for j in range(1,4): 

    page = j; 
    url = serviceurl + urllib.urlencode({ 'rh':'n:1571277031','page':page,'sort': 'salesrank' , 'unfiltered':'1', 'ie':'UTF8' }); 
    driver = webdriver.Chrome(); 
    driver.maximize_window() #For maximizing window 
    driver.get(url); 
    driver.implicitly_wait(3) #gives an implicit wait for 10 seconds 
    while driver.execute_script("return document.readyState") != 'complete': 
     pass; 

    for i in range(1,17): 

     temp = 0; 
     print count; 
     count+=1; 

     try: 
      print driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div[3]/div[2]/div/div[4]/div[1]/div/ul/li[%s]/div/div/div/div[2]/div[1]/div/div/a/span[1]/span/span"%(i)).text.encode('utf-8') 

     except Exception as e: 
      print "Not a best seller"; 
      # print e; 

下面是它的輸出我得到當我運行相同的腳本(正確ANS): -

1 
Best seller 
2 
Best seller 
3 
Not a best seller 
4 
Not a best seller 
5 
Best seller 
6 
Not a best seller 

而我還可以得到下面的輸出(錯誤ANS): -

1 
Not a best seller 
2 
Not a best seller 
3 
Not a best seller 
4 
Not a best seller 
5 
Not a best seller 
6 
Not a best seller 

任何理由爲什麼發生這種情況?以及解決這個問題的可能方法

+0

你應該取消註釋'print e'它會告訴你什麼失敗。順便說一句,你不需要所有';' – PRMoureu

+0

@PRMoureu它顯示以下錯誤: - selenium.common.exceptions.NoSuchElementException:消息:沒有這樣的元素:無法找到元素.......... 但是元素在那裏,可以說我再次運行腳本,它不會顯示錯誤並獲取正確的答案。就像它的腳本一樣,它有時可以定位元素,有時不能。 任何幫助? P.S. :- 謝謝你的 ;部分。我已經知道,但因爲我主要是用c/C++編寫代碼,所以有習慣把它放在 –

+0

這是我在生活中見過的最糟糕的xpath「print driver.find_element_by_xpath(」/ html/body/div [1]/DIV [2]/DIV/DIV [3]/DIV [2]/DIV/DIV [4]/DIV [1]/DIV/UL /利[%S]/DIV/DIV/DIV/DIV [2]/div [1]/div/div/a/span [1]/span/span「%(i))。text.encode('utf-8')」這樣會容易出錯。不要自動生成XPATH並學會創建可靠的XPATHs –

回答

0

如果您想要列出產品,您應該使用帶id或類引用的選擇器(檢查源以分析此類並在可以時提取類名或id,大多數瀏覽器允許右鍵單擊元素啓動檢查):

for i in range(17): 
    product = driver.find_element_by_id('result_{}'.format(i)) 
    try: 
     print product.find_element_by_xpath("//span[@class='sx-badge-text']").text.encode('utf-8') 
    except: 
     print 'not a best seller' 
+0

它仍然顯示相同的結果。有時它會提取正確的數據,有時不正確 –

+0

@GopalChitalia這與您測試中的相同頁面/網址發生了什麼? – PRMoureu

+0

是@PRMoureu,它發生在相同的網址。 和暢銷書類是 「a-badge-text」 不是 「sx-badge-text」 –