Для захвата данных на фоне вы можете выполнить:
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)