Я делаю программу для удаления мобильных телефонов с веб-сайтов Amazon, но моя программа выдает мне исключение тайм-аута даже после того, как страница загружается вовремя.
Вот мой код
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from bs4 import BeautifulSoup
import urllib.request
class Amazon_all_mobile_scraper:
def __init__(self):
self.driver = webdriver.Firefox()
self.delay = 60
self.url = "https://www.amazon.in/mobile-phones/b/ref=sd_allcat_sbc_mobcomp_all_mobiles?ie=UTF8&node=1389401031"
def load_amazon(self):
self.driver.get(self.url)
try:
wait = WebDriverWait(self.driver,self.delay)
wait.until(EC.presence_of_element_located((By.CLASS_NAME,"acs-ln-link")))
print("Page is ready.")
except TimeoutException:
print("Took too much time to load!")
except:
print("Something went wrong in loading part!!")
def extract_list_of_mobiles(self):
try:
mobile_list = self.driver.find_element_by_xpath('//div[@class = "acs-ln-link"]')
print(mobile_list)
except NoSuchElementException:
print("Sorry, Unable to get the requested element")
scraper = Amazon_all_mobile_scraper()
scraper.load_amazon()
scraper.extract_list_of_mobiles()
Пожалуйста, помогите мне разобраться в этом коде.
Насколько я могу судить, этого имени класса нет на странице.
Спасибо, SIM и QHarr. Получил ошибку.
@ MrSmith42 перестанет нацеливаться на этого пользователя.
Класс не соответствует "acs-ln-link", должно быть "acs-ln-links".
Только переход с acs-ln-link
на acs-ln-links
не поможет. Ваш xpath
должен больше походить на '//div[contains(@class,"acs-ln-nav-expanded")]//*[@class = "acs-ln-links"]//a'
. Однако вы можете справиться с этим, чтобы получить требуемый результат:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class Amazon_all_mobile_scraper:
url = "https://www.amazon.in/mobile-phones/b/ref=sd_allcat_sbc_mobcomp_all_mobiles?ie=UTF8&node=1389401031"
def __init__(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 15)
def load_n_get_from_amazon(self):
self.driver.get(self.url)
mobile_list = self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[contains(@class,"acs-ln-nav-expanded")]//*[@class = "acs-ln-links"]//a')))
return mobile_list
def __del__(self):
self.driver.close()
if __name__ == '__main__':
scraper = Amazon_all_mobile_scraper()
for item in scraper.load_n_get_from_amazon():
print(f'{item.text}\n{item.get_attribute("href")}\n')
Вы должны изменить self.driver = webdriver.Chrome()
на self.driver = webdriver.Firefox()
, чтобы сценарий заработал.
Не могли бы вы пояснить, как вы сформировали этот XPath, или предложить какой-нибудь веб-сайт, на котором я могу научиться создавать тот, который вы написали.
Это выходит за рамки вашего первоначального вопроса @Star Rider. Однако вы можете проверьте эту ссылку, чтобы узнать, как может быть сформирован xpath. Спасибо.
Что ты хочешь взять оттуда? Ваш
xpath
ничего не подходит.