Почему функция zip () не возвращает ожидаемые результаты в списке, используя Python / Selenium? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть блок кода, использующий Python / Selenium, который должен перебирать различные элементы на веб-странице и отображать, доступен ли элемент, и если он есть, показывать имя и цвет элемента, а также предоставлятьссылка на страницу.Код работает, как и ожидалось, на предметах, которые были распроданы, но когда он достигает первого доступного элемента, python просто возвращает «доступный» и предоставляет имя / URL последнего элемента на странице вместо ожидаемого элемента.блок кода:

shirts = driver.find_elements_by_xpath("""//*[@id='container']/article/div/h1/a""")
colors = driver.find_elements_by_xpath("""//*[@id='container']/article/div/p/a""")
articles = driver.find_elements_by_tag_name('article')
for article in articles:
    ActionChains(driver).move_to_element(article).perform()
    if article.find_element_by_tag_name('a').text == "sold out":
        print("sold out")
    elif article.find_element_by_tag_name('a').text == "":
    ActionChains(driver).move_to_element(article).perform()
        print("available")
    for shirt, color in zip(shirts, colors):
        shirt_text = shirt.text
        color_text = color.text
    print shirt_text, color_text
    link = article.find_element_by_xpath('div/a').get_attribute('href')
    print(link)

Вот фрагмент того, что возвращает приведенный выше код: (ожидаемый элемент, который должен отображаться, это Plaza Sunglasses Magenta)

sold out
sold out
available
Supreme®/Hanes® Crew Socks (4 Pack) White
https://www.supremenewyork.com/shop/accessories/zf83g0dx4/hijz30rq8
sold out
sold out
sold out
sold out
sold out
sold out

и ссылкана страницу, которую я очищаю: http://www.supremenewyork.com/shop/all/accessories

Мой сценарий настроен неправильно или я что-то упустил полностью?

1 Ответ

0 голосов
/ 21 мая 2018

Он печатает только последнее название продукта, потому что ваш список shirts содержит все названия продуктов на всей странице, а для shirt_text задан последний элемент в этом списке.

Вместо этого переместите запросыдля названия и цвета в цикле статьи:

for article in articles:
    if article.find_element_by_tag_name('a').text == 'sold out':
        print('sold out')
    else:
        print('available')
        [...]
        nameLink = article.find_element_by_xpath('div/h1/a')
        colorLink = article.find_element_by_xpath('div/p/a')
        [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...