Извлечение разных данных каждый раз при запуске сценария селена
Я запустил скрипт python selenium по следующему URL: -
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;
Вот вывод, который я получаю, когда запускаю тот же скрипт (правильный ответ):-
1
Best seller
2
Best seller
3
Not a best seller
4
Not a best seller
5
Best seller
6
Not a best seller
в то время как я также получаю следующий вывод (неправильный ответ):-
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
Какие-либо причины, почему это происходит?? и любое возможное решение этой проблемы?
1 ответ
Если вы хотите перечислить продукты, вы должны использовать селектор с идентификатором или ссылкой на класс (проверьте источник для анализа этого и извлеките имена классов или идентификатор, когда это возможно, большинство браузеров позволяют щелкнуть правой кнопкой мыши на элементе, чтобы запустить проверку):
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'