Селен за l oop перебирает весь сайт - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь почистить каждый аэропорт и есть ли у него значки с этого сайта:

https://www.aopa.org/destinations/airports/state/AL

Я могу легко получить названия аэропортов и идея состоит в том, чтобы go войти в каждую строку и проверить, есть значок или нет. Но по какой-то причине my for l oop проверяет не все строки, а весь сайт. Аэропорт округа Чилтон должен быть "N", а не "Y".

driver = webdriver.Chrome(executable_path=r'C:\Program Files\chromedriver.exe')

wait = WebDriverWait(driver, 10)

driver.get("https://www.aopa.org/destinations/airports/state/AL")
time.sleep(3)

airport_list = []
paved_runway = []

airport_row = driver.find_elements_by_xpath('//div[@class = "state-airports__airport"]')
print(len(airport_row))

for r in airport_row:
    airport_list.append(r.text)
    #print(r.text)

    try:
        badge = r.find_elements_by_xpath('//div[@class="airport-icons"]//app-badge')
        print(r.text + ": Y")
        paved_runway.append("Y")

    except:
        print("N")
        paved_runway.append(r.text + " N")

    #print(airport_list)
    #print(paved_runway)
driver.close()

1 Ответ

2 голосов
/ 09 марта 2020

Вы должны использовать точку . в начале второго xpath, чтобы создать относительный xpath и искать только в одной строке. Без точки поиск во всех HTML.

badge = r.find_elements_by_xpath('.//div[@class="airport-icons"]//app-badge')

find_elementss в elements) никогда не вызывает ошибку, но возвращает пустой список, и вы должны проверить, получается ли пустой список


from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path=r'C:\Program Files\chromedriver.exe')

#wait = WebDriverWait(driver, 10)

driver.get("https://www.aopa.org/destinations/airports/state/AL")
time.sleep(3)

airport_list = []
paved_runway = []

airport_row = driver.find_elements_by_xpath('//div[@class = "state-airports__airport"]')
print(len(airport_row))

for r in airport_row:
    #print(r.text)
    airport_list.append(r.text)

    badge = r.find_elements_by_xpath('.//div[@class="airport-icons"]//app-badge')
    if badge:
        print(r.text + ": Y")
        paved_runway.append(r.text + ": Y")
    else:
        print(r.text + ": N")
        paved_runway.append(r.text + ": N")

driver.close()

Результат:

315
00AL - Epps Airpark: Y
01AL - Ware Island: Y
02A - Chilton County Airport: N
02AL - Bass Field: Y
03AL - Highland Medical Center: Y
04A - Frank Sikes Airport: N
04AL - Anniston Ahp (Anniston Army Depot): Y
05AL - Allen Stagefield Ahp: Y
06A - Moton Field Municipal: N
06AL - Brown Stagefield Ahp: Y
07A - Franklin Field: N
07AL - Tac X Stagefield Ahp: Y
08A - Wetumpka Municipal Airport: N
08AL - Little Lagoon: Y
09A - Butler-Choctaw County Airport: N
0A8 - Bibb County Airport: N
0AL0 - Huntsville Field: Y
0AL1 - Resort: Y
0AL2 - Clay County Hospital: Y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...