Как захватить текст родительского элемента после проверки текста дочернего элемента - PullRequest
0 голосов
/ 19 февраля 2020
store_block_list  = '//div[@class="amlocator-store-information"]'
anc ='//div[@class="amlocator-store-information"]/parent::div'


driver.get('https://www.charlottesweb.com/where-to-buy-charlottes-web/partner-locations')
wait = WebDriverWait(driver, 30)
storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list)))
full_list = []
address_list = []
for store in storeElement:
    address = driver.execute_script('return arguments[0].childNodes[2].textContent;', store).strip()
    if address not in address_list:
        address_list.append(address)
        f=driver.find_element_by_xpath(anc)
        full_list.append(f.get_attribute('data-amid'))
driver.quit()
print(full_list)

Я просматриваю этот сайт и пытаюсь захватить текст адреса и добавить к адресу _list, если адреса нет в списке, а затем перейти к данным на фоне и перехватить его, причину, по которой я не получаю напрямую данные - это некоторые адреса, которые не являются уникальными, и я хочу получить данные только среди уникальных адресов.

1 Ответ

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

Для захвата данных на фоне вы можете выполнить:

   parent = store.find_element_by_xpath('..')
   grandparent = parent.find_element_by_xpath('..')
   data_amid = grandparent.get_attribute('data-amid')

Это вернет числовое значение

Одна проблема с вашим кодом состоит в том, что вы ищете данные на фоне в ' f ', который использует find_element_by_xpath, это вернет только первый найденный элемент. Без перехода к узлу «прародитель» вызов get_attribute вернет только «None», и если вы переместитесь вверх от f к элементу «прародитель», find_element_by_xpath всегда остановится на первом элементе и вернет «1».

Если вы переместитесь вверх по узлу прародителя, дважды используя ('..') из «store», а затем запустите, вы можете получить атрибут data-amid.

Вот он в вашем коде:

    driver.get('https://www.charlottesweb.com/where-to-buy-charlottes-web/partner-locations')
    wait = WebDriverWait(driver, 30)
    storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list)))
    full_list = []
    address_list = []
    for store in storeElement:
        address = driver.execute_script('return arguments[0].childNodes[2].textContent;', store).strip()
        if address not in address_list:
            address_list.append(address)
            parent = store.find_element_by_xpath('..')
            grandparent = parent.find_element_by_xpath('..')
            print(grandparent.get_attribute('data-amid'))
            full_list.append(grandparent.get_attribute('data-amid'))
    driver.quit()
    print(full_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...