Не могу получить первый элемент с селеновым питоном - PullRequest
0 голосов
/ 30 мая 2018

Мне нужно выбрать (открыть) каждый фильм в списке, начиная с первого до последнего, один раз в одном, вернуться назад и открыть следующий фильм в списке до последнего фильма.Но у меня возникла проблема, потому что код выбирает последний фильм и открывает его не первый.

Я не знаю, как выбрать первый и повторить процесс для каждого фильма в списке.

Это код:

from selenium import webdriver
import time

URL = 'https://www.cineplanet.cl/peliculas'
XPATH_VER_MAS_PELICULAS = '//button'
ClASS_CARTELERA = 'movie-info-details'
XPATH_COMPRAR = '//div[@class="movie-info-details"]/div[@class="movie-info-details--wrapper"]/div[@class="movie-info-details--first-button-wrapper"]/button'
PATH = 'C:\\Program Files\\chrome-driver\\chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(URL)

def available_movies():
    try:
        select = driver.find_element_by_class_name(ClASS_CARTELERA)
        allOptions = select.find_elements_by_xpath(XPATH_COMPRAR)
        for option in allOptions:
            option.click()
    except:
        pass

print (driver.title)
time.sleep(5)

while True:
    try:
        if XPATH_VER_MAS_PELICULAS:
            driver.find_elements_by_xpath(XPATH_VER_MAS_PELICULAS)[-1].click()
            time.sleep(5)
        else:
            break
    except:
        break

available_movies()
time.sleep(2)
driver.quit()

1 Ответ

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

Ваш код требует много рефакторинга, но давайте попробуем:


    # Keep doing this while we have movies to click
    while len(driver.find_element_by_class_name('movies-list--large-item')):
        # This will iterate through each movie
        for movie in driver.find_element_by_class_name('movies-list--large-item'):
            # Now get the button to see the movie details
            movie.find_element_by_class_name('cineplanet-icon_more').click()
            # Once you are in the movie details view do an assertion
            # Go back in the browser to the previous page
            driver.back()

        # If you reach this it means that you clicked all the movies in the current view
        # So click the View more movies button to go to the next page
        driver.find_element_by_css_selector('.movies-list--view-more-button-wrapper .call-to-action--text')

Пара дополнительных вещей, которые я заметил в вашем коде: - Не используйте time.sleep(5) - это ненадежно.Используйте Webdriver ждет и ожидаемые условия для ожидания присутствия элементов:

http://selenium -python.readthedocs.io / waits.html

  • Неиспользовать Xpaths, это также ненадежно.Если возможно, используйте идентификаторы или имена классов
  • Поверхностные исключения, которые вы делаете: except: pass таким образом, вы не будете знать, когда ваш код не будет работать
  • Организуйте свой код в подходе Test Suite, возможно, стоит подуматьИспользование Unittest2 для Python

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...