Вы можете прочитать о селекторах здесь и здесь .
Проблема в том, что при нажатии на элемент списка он открывается в новой вкладке,Вы должны переключиться на него перед любым действием.Вот несколько примеров того, как перемещаться между окнами:
current_window = driver.current_window_handle
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".iddbNe"))).click()
wait.until(EC.new_window_is_opened)
driver.switch_to.window(driver.window_handles[1])
С помощью Selenium решение может собирать все ссылки из списка и после перехода к ним.Для этого вы можете использовать .iddbNe a[name=classified-link]
css selector.После сбора всех ссылок со всех необходимых страниц вы можете перейти к ним и собрать данные.
Вот пример того, как это сделать для первой страницы:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ...
wait = WebDriverWait(driver, 20)
# you can put loop to go throw all pages you need and add to the list
links = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".iddbNe a[name=classified-link]")))
for link in links:
driver.get(link)
# get you data
Лучшее решение для очистки - использовать запросы .С кодом ниже простой пример того, как вы можете получить 100 результатов в формате JSON.В отчете вы можете найти общее количество результатов и использовать его для зацикливания и сбора всей необходимой вам информации:
import requests
headers = {
'sec-fetch-mode': 'cors',
'origin': 'https://www.seloger.com',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'ru,en-US;q=0.9,en;q=0.8,tr;q=0.7',
'pragma': 'no-cache',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/77.0.3865.90 Safari/537.36',
'content-type': 'application/json',
'accept': 'application/json',
'cache-control': 'no-cache',
'authority': 'www.seloger.com',
'referer': 'https://www.seloger.com/list_beta.htm?projects=2%2C5&types=2%2C1&natures=1%2C2%2C4&places=%5B%7Bcp'
'%3A75%7D%5D&qsVersion=1.0&LISTING-LISTpg=2',
'sec-fetch-site': 'same-origin',
'dnt': '1',
}
params = (
('from', '0'),
('size', '100'),
('isSeo', 'false'),
)
data = '{"idPublication":null,"projects":[2,5],"types":[2,1],"natures":[1,2,4],"places":[{"label":"Paris",' \
'"cities":null,"districts":null,"countries":null,"divisions":null,"subDivisions":["75"],"fakeCities":null}],' \
'"searchAreas":null,"isochronePoints":null,"proximities":null,"withGeoloc":null,"price":null,' \
'"groundSurface":null,"surface":null,"bedrooms":[],"rooms":[],"bedroom":null,"room":null,"sort":null,' \
'"floor":null,"lastFloor":null,"hearth":null,"guardian":null,"view":null,"balcony":null,"pool":null,' \
'"lift":null,"terrace":null,"cellar":null,"south":null,"parking":null,"box":null,"parquet":null,"locker":null,' \
'"furnished":null,"disabledAccess":null,"alarm":null,"toilet":null,"bathtub":null,"shower":null,"hall":null,' \
'"livingRoom":null,"diningRoom":null,"kitchen":null,"heating":null,"unobscured":null,"picture":null,' \
'"exclusiveness":null,"priceChange":null,"privateSeller":null,"video":null,"vv":null,"enterprise":null,' \
'"garden":null,"basement":null,"groundFloor":null,"houseboat":null} '
response = requests.post('https://www.seloger.com/list/api/externaldata', headers=headers, params=params, data=data)
print(response.text)