Python Selenium Webdriver: повторение той же информации в цикле for - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь получить текст с сайта (https://www.doc.govt.nz/parks-and-recreation/places-to-go/otago/places/dunedin-area/?tab-id=50578). Я пытаюсь извлечь информацию, представленную на сайте. Вот мой код, который извлекает текст:

driver = webdriver.Chrome(driverLocation)
driver.get('https://www.doc.govt.nz/parks-and-recreation/places-to-go/otago/places/dunedin-area/?tab-id=50578')
driver.implicitly_wait(20)

for element in driver.find_elements_by_xpath('//div[@class="profile-detail"]'):

    desc = element.find_element_by_xpath('//div[@class="profile-detail-body"]').text
    info = element.find_element_by_xpath('//div[@class="profile-info"]').text

    print(desc)
    print(info)

Проблема заключается в том, что он всегда повторяет первую запись информации, представленной на странице (то есть информацию Allans Beach Track). Когда я пытался извлечь информацию с помощью двух отдельных циклов, он работал нормально. Не могли бы вы указать мне, где я совершаю ошибку?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Идея состоит в том, чтобы понять структуру элементов и затем определить свою стратегию создания сценариев.

Я полагаю, что вы пытаетесь получить доступ к каждому элементу списка, присутствующему в списке "class =" profileRepeater ", который имеет несколько записей "class =" profile-info "и" profile-detail-body ".

driver = webdriver.Chrome(driverLocation)
driver.get('https://www.doc.govt.nz/parks-and-recreation/places-to-go/otago/places/dunedin-area/?tab-id=50578')
driver.implicitly_wait(20)

parentElement = driver.find_element_by_class_name('profileRepeater')

for listItemElement in parentElement.find_element_by_tag_name('li'):

    desc = listItemElement.find_element_by_class_name('profile-detail-body').text
    info = listItemElement.find_element_by_class_name('profile-info').text

    print(desc)
    print(info)

это должно печатать все различные значения в элементах списка результатов поиска

0 голосов
/ 12 февраля 2020

При использовании xpath для поиска элемента из другого элемента необходимо указать текущий контекст . перед вторым путем

for element in driver.find_elements_by_xpath('//div[@class="profile-detail"]'):
    desc = element.find_element_by_xpath('.//div[@class="profile-detail-body"]').text
    info = element.find_element_by_xpath('.//div[@class="profile-info"]').text

Вместо него можно использовать class_name без каких-либо условий

for element in driver.find_elements_by_class_name('profile-detail'):
    desc = element.find_element_by_class_name('profile-detail-body').text
    info = element.find_element_by_class_name('profile-info').text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...