Selenium не может найти элемент Лучшие цены на покупку

В настоящее время я изучаю Selenium и хочу попрактиковаться в BestBuy. У меня возникли проблемы с выяснением того, как очистить цену либо по XPATH, либо по CLASSNAME с помощью Selenium.

Что я делаю не так? Ошибка, которую я продолжаю получать, заключается в том, что Selenium не может найти этот элемент. Может ли кто-нибудь указать мне, почему Selenium не может найти элемент?

Ссылка на лучшую покупку

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(r"Desktop\Selenium\chromedriver.exe")
website = 'https://www.bestbuy.com/site/apple-10-2-inch-ipad-latest-model-with-wi-fi-64gb-space-gray/4901809.p?skuId=4901809'
driver.get(website)

title = driver.find_element(By.CLASS_NAME,'sku-title')
price = driver.find_element(By.XPATH,'//*[@id = "pricing-price-2768792"]/div/div/div/div/div/div[1]/div[1]/div/div/span[1]')
status = driver.find_element(By.CLASS_NAME,'fulfillment-add-to-cart-button')
status = status.text

print(price.text)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема заключается в том, что суффиксы атрибутов являются динамическими и меняются время от времени или от запроса к запросу.

Попробуйте изменить свою стратегию выбора и найти что-то, что не так динамично, чтобы достичь своей цели. Например. пойти с css selectors:

driver.find_element(By.CSS_SELECTOR,'[data-sticky-media-gallery] .priceView-hero-price span')

Примечание:Результат также зависит от страны, из которой вы выполняете сбор данных, поэтому мне пришлось щелкнуть ссылку для нас, чтобы получить конечную страницу продукта.

driver.find_element(By.CLASS_NAME,'us-link').click()
Пример
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(r"Desktop\Selenium\chromedriver.exe")
website = 'https://www.bestbuy.com/site/apple-10-2-inch-ipad-latest-model-with-wi-fi-64gb-space-gray/4901809.p?skuId=4901809'
driver.get(website)

title = driver.find_element(By.CLASS_NAME,'sku-title')
price = driver.find_element(By.CSS_SELECTOR,'[data-sticky-media-gallery] .priceView-hero-price span')
status = driver.find_element(By.CLASS_NAME,'fulfillment-add-to-cart-button')
status = status.text

print(price.text)
Выход
$329.99

Другие вопросы по теме