你遇到的主要问题是locators。
1 首先,比较我使用的定位器和您代码中的定位器。
2 其次,添加显式等待from selenium.webdriver.support import expected_conditions as EC
3 第三,删除不必要的代码。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
url = "https://www.remax.pt/comprar?searchQueryState={%22regionName%22:%22%22,%22businessType%22:1,%22listingClass%22:1,%22page%22:1,%22sort%22:{%22fieldToSort%22:%22ContractDate%22,%22order%22:1},%22mapIsOpen%22:false,%22listingTypes%22:[],%22prn%22:%22%22}"
driver.get(url)
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='row results-list ']/div")))
rows = driver.find_elements_by_xpath("//div[@class='row results-list ']/div")
data = []
for row in rows:
price_p = row.find_element_by_xpath(".//p[@class='listing-price']").text
address = row.find_element_by_xpath(".//h2[@class='listing-address']").text
type = row.find_element_by_xpath(".//li[@class='listing-type']").text
area = row.find_element_by_xpath(".//li[@class='listing-area']").text
quartos = row.find_element_by_xpath(".//li[@class='listing-bedroom']").text
data.append([price, address, price_p, area, quartos])
driver.close()
driver.quit()
请注意,我是在 Linux 上进行的。您的 Chrome 驱动程序位置不同。
另外,要打印列表,请使用:
for p in data:
print(p.text, sep='\n')
您可以根据需要修改它。
我收到以下输出:
['240 000 €', 'Lisboa - Lisboa, Carnide', 'Apartamento', '54 m\n2', '1']
['280 000 €', 'Lisboa - Lisboa, Beato', 'Apartamento', '80 m\n2', '1']
['285 000 €', 'Lisboa - Lisboa, Beato', 'Apartamento', '83 m\n2', '1']
['290 000 €', 'Lisboa - Lisboa, Beato', 'Apartamento', '85 m\n2', '1']
['280 000 €', 'Lisboa - Lisboa, Beato', 'Apartamento', '80 m\n2', '1']
['290 000 €', 'Lisboa - Lisboa, Beato', 'Apartamento', '85 m\n2', '1']
['285 000 €', 'Lisboa - Lisboa, Beato', 'Apartamento', '83 m\n2', '1']
['80 000 €', 'Santarém - Cartaxo, Ereira e Lapa', 'Terreno', '12440 m\n2', '1']
['260 000 €', 'Lisboa - Sintra, Queluz e Belas', 'Prédio', '454 m\n2', '1']
['37 500 €', 'Santarém - Torres Novas, Torres Novas (Santa Maria, Salvador e Santiago)', 'Prédio', '92 m\n2', '1']
['505 000 €', 'Lisboa - Sintra, Algueirão-Mem Martins', 'Duplex', '357 m\n2', '1']
['135 700 €', 'Lisboa - Mafra, Milharado', 'Terreno', '310 m\n2', '1']
['132 800 €', 'Lisboa - Mafra, Milharado', 'Terreno', '310 m\n2', '1']
['133 440 €', 'Lisboa - Mafra, Milharado', 'Terreno', '310 m\n2', '1']
['179 000 €', 'Lisboa - Mafra, Milharado', 'Terreno', '310 m\n2', '1']
['75 000 €', 'Lisboa - Vila Franca de Xira, Vila Franca de Xira', 'Apartamento', '52 m\n2', '1']
['575 000 €', 'Porto - Matosinhos, Matosinhos e Leça da Palmeira', 'Apartamento', '140 m\n2', '1']
['35 000 €', 'Setúbal - Almada, Caparica e Trafaria', 'Outros - Habitação', '93 m\n2', '1']
['550 000 €', 'Leiria - Alcobaça, Évora de Alcobaça', 'Moradia', '160 m\n2', '1']
['550 000 €', 'Lisboa - Loures, Santa Iria de Azoia, São João da Talha e Bobadela', 'Moradia', '476 m\n2', '1']