Не удается получить атрибут (‘href’) из элемента через Selenium

#python #pandas #selenium

#python #панды #селен

Вопрос:

Я застрял на этом уже целую вечность… Не могли бы вы помочь?

Пытаюсь создать скребок, который очищает списки на этом веб-сайте, и я просто не могу получить URL-адрес каждого списка. Не могли бы вы помочь?

Я пробовал множество способов найти элемент, этот последний — по абсолютному XPath (по классу тоже всегда терпел неудачу)

Код:

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
import time

PATH = "/Users/csongordoma/Documents/chromedriver"
driver = webdriver.Chrome(PATH)
driver.get('https://ingatlan.com/lista/elado lakas budapest')

data = {}
df = pd.DataFrame(columns=['Price', 'Address', 'Size', 'Rooms', 'URL'])

listings = driver.find_elements_by_css_selector('div.listing__card')
for listing in listings:
    data['Price'] = listing.find_elements_by_css_selector('div.price')[0].text
    data['Address'] = listing.find_elements_by_css_selector('div.listing__address')[0].text
#    data['Size'] = listing.find_elements_by_css_selector('div.listing__parameter listing__data--area-size')[0].text
    data['URL'] = listing.find_elements_by_xpath('/html[1]/body[1]/div[1]/div[2]/div[4]/div[1]/main[1]/div[1]/div[1]/div[1]/a[3]')[0].text
    df = df.append(data, ignore_index=True)

print(len(listings))
print(data)

#   driver.find_element_by_xpath("//a[. = 'Következő oldal']").click()

driver.quit()
 

Сообщение об ошибке:

 Traceback (most recent call last):
  File "hello.py", line 18, in <module>
    data['URL'] = listing.find_elements_by_xpath('/html[1]/body[1]/div[1]/div[2]/div[4]/div[1]/main[1]/div[1]/div[1]/div[1]/a[3]')[0].text
IndexError: list index out of range
 

Большое спасибо!

Комментарии:

1. Похоже, это второй a [2] списка, а не a [3] . Также используйте относительный путь, а не абсолютный xpath. Затем используйте get_attribute(‘href’) вместо текста.

2. ваш find_elements не возвращает совпадающих элементов. Исправьте xpath.

Ответ №1:

Сработало бы что-то вроде приведенного ниже. Чтобы получить webelement из [2] из элемента, и это href.

 data['URL'] = listing.find_element_by_xpath('//a[2]').get_attribute('href')