Может ли кто-нибудь помочь мне понять, как распечатать параметры в этом раскрывающемся списке? - PullRequest
0 голосов
/ 21 июня 2020

Я пытался использовать селен, поэтому могу перечислить доступные варианты размера на этой веб-странице, но мне трудно определить элемент класса. Каждый раз, когда я использую main-size-select-0, я получаю сообщение об ошибке: не удается найти элемент. Я даже пробовал использовать xpath, но это тоже не сработало.

Вот мой код ниже:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup

driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver')
driver.get("https://www.asos.com/nike/nike-air-max-95-logo-leather-trainers-in-dark-navy-orange/prd/20750072?colourwayid=60085113")
select = Select(driver.find_element_by_id("main-size-select-0"));

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Несколько вещей ...

  1. Элементы в списке загружаются немного позже, чем при загрузке страницы. Я бы поместил time.sleep () или WebDriverWait после вашего driver.get ([URL]).

  2. Чтобы получить список элементов в раскрывающемся списке, вам нужно чтобы установить в xPath тег «option» в разделе «main-size-select-0». Для Chrome это будет: // * [@ id = "main-size-select-0"] / option Доступ к ним с помощью driver.find_element s _by_xpath , что приведет к вернуть список всех элементов в раскрывающемся списке

Подводя итог ...

...
import time

driver = webdriver.Firefox(executable_path = '/usr/local/bin/geckodriver')
driver.get("https://www.asos.com/nike/nike-air-max-95-logo-leather-trainers-in-dark-navy-orange/prd/20750072?colourwayid=60085113")
time.sleep(5)
select_list = Select(driver.find_elements_by_xpath("//*[@id="main-size-select-0"]/option"));

Обратите внимание, что созданный там xPath был выполнен через Chrome . Для Firefox он может немного отличаться. Просто убедитесь, что у вас нет доступа к конкретному элементу в списке, например: // * [@ id = "main-size-select-0"] / option [0]

0 голосов
/ 21 июня 2020

Одна из основных проблем может заключаться в том, что ваш код ищет меню до его полной загрузки. Вы можете использовать WebDriverWait и EC, чтобы удерживать код, пока элемент не будет загружен, а затем продолжить. Неважно, как вы найдете элемент, я использовал xpath, но вы можете делать все, что захотите. Как только вы его получите, метод .text вернет все, что вам нужно.

Я разделил текст на новую строку и удалил все, чего нет в наличии, а также первый элемент в списке, который называется «Пожалуйста, выберите».

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


driver = webdriver.Chrome()
driver.get("https://www.asos.com/nike/nike-air-max-95-logo-leather-trainers-in-dark-navy-orange/prd/20750072?colourwayid=60085113")
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="main-size-select-0"]')))
dd = driver.find_element_by_xpath( '//*[@id="main-size-select-0"]')

[x for x in dd.text.split('\n') if not any(w in x for w in ['Please','Not'])]

Вывод

['UK 6',
 'UK 7',
 'UK 7.5',
 'UK 8',
 'UK 8.5',
 'UK 9',
 'UK 9.5',
 'UK 10',
 'UK 10.5',
 'UK 11',
 'UK 12',
 'UK 13']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...