Найти разные элементы в двух разных div с одним и тем же классом, используя Selenium - PullRequest
1 голос
/ 24 июня 2019

Я использую Python и Selenium для очистки сайта. Использовал find_by_element, чтобы найти все нужные мне значения, но я столкнулся с чем-то более сложным. HTML-сайт показывает точно структуру двух разных значений, и я не могу использовать простой find_element_by_class, потому что они имеют одинаковые классы и идентификаторы. Я не хочу использовать xpath или селектор, потому что я повторяю это во многих div-полях "flight-row", и это заставило бы мысли быть более жестко закодированными.

<div class="flight-row">
    <div class="row row-eq-heights">
        <div class="col-xs-4 col-md-4 no-padding"><span class="airline-name">gol</span><span class="flight-number">AM-477</span></div>
        <div class="col-xs-4 col-md-4">
            <div class="flight-timming"><span class="flight-time">06:15</span><span class="flight-destination">IAH</span></div><span class="flight-data">01/10/19</span></div>
        <div class="col-xs-4 col-md-4 no-padding">
            <div class="duration"><span class="flight-duration">21:25</span><span class="flight-stops" aria-label="Paradas do voo">2 paradas</span></div>
        </div>
        <div class="col-xs-4 col-md-4">
            <div class="flight-timming"><span class="flight-destination">GIG</span><span class="flight-time">05:40</span></div><span class="flight-data">02/10/19</span></div>
    </div>
</div>

Я хочу получить значения из времени полета, пункта назначения и данных о полете из обоих div "col-xs-4 col-md-4".

Это немного из моего кода:

outbound_flights = driver.find_elements_by_css_selector("div[class^='flight-item ']")

for outbound_flight in outbound_flights:
    airline = outbound_flight.find_element_by_css_selector("span[class='airline-name']")

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Попробуйте следующий селектор CSS, чтобы получить flight-time, flight-destination и flight-data

outbound_flights = driver.find_elements_by_css_selector("div.col-xs-4.col-md-4:not(.no-padding)")

for outbound_flight in outbound_flights:
    flight_time = outbound_flight.find_element_by_css_selector("div.flight-timming span.flight-time").text
    print(flight_time)
    flight_destination = outbound_flight.find_element_by_css_selector("div.flight-timming span.flight-destination").text
    print(flight_destination)
    flight_data = outbound_flight.find_element_by_css_selector("span.flight-data").text
    print(flight_data)

Вывод на консоль:

06:15
IAH
01/10/19
05:40
GIG
02/10/19

РЕДАКТИРОВАНИЕ Ответ:

outbound_flights = driver.find_elements_by_css_selector("div.col-xs-4.col-md-4:not(.no-padding)")
flighttime=[]
for outbound_flight in outbound_flights:
    flight_time = outbound_flight.find_element_by_css_selector("div.flight-timming span.flight-time").text
    print(flight_time)
    flighttime.append(flight_time)
    flight_destination = outbound_flight.find_element_by_css_selector("div.flight-timming span.flight-destination").text
    print(flight_destination)
    flight_data = outbound_flight.find_element_by_css_selector("span.flight-data").text
    print(flight_data)

departure_time=flighttime[0]
arrival_time=flighttime[1]

print("Departure time :" + departure_time)
print("Arrival time :" + arrival_time)
1 голос
/ 25 июня 2019

Вы можете получить значения по индексу.

(//*[@class='flight-time'])[1] и (//*[@class='flight-time'])[2]

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