#python #selenium
#python #селен
Вопрос:
можете ли вы сказать мне, почему мой цикл while не работает, пожалуйста? Я не получаю сообщения об ошибке, оно запускается только один раз.
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)
current_page = 1
driver.get('https://ingatlan.com/lista/elado lakas budapest?page=' str(current_page))
data = {}
df = pd.DataFrame(columns=['Price', 'Address', 'Size', 'Rooms', 'URL', 'Labels'])
listings = driver.find_elements_by_css_selector('div.listing__card')
while current_page < 10:
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__parameters')[0].text
data['Labels'] = listing.find_elements_by_css_selector('div.listing__labels')[0].text
data['URL'] = listing.find_elements_by_css_selector('a.listing__link.js-listing-active-area')[0].get_attribute('href')
df = df.append(data, ignore_index=True)
current_page = 1
print(len(listings))
print(df)
# driver.find_element_by_xpath("//a[. = 'Következő oldal']").click()
driver.quit()
на выходе получается хороший фрейм данных из 20 элементов, что составляет одну страницу. на веб-сайте, который я пытаюсь очистить. Установите ограничение в 10 циклов, чтобы никого не перегружать, но в идеале я хочу просматривать все страницы.
Ответ №1:
Просто расположите код внутри вашего цикла while и сделайте отступ от текущей страницы во внешний цикл. Я добавил попытку, за исключением случаев каких-либо ошибок, и webdriver ожидает согласованности получения элементов после driver.get.
current_page = 1
data = {}
df = pd.DataFrame(columns=['Price', 'Address', 'Size', 'Rooms', 'URL', 'Labels'])
while current_page < 10:
driver.get('https://ingatlan.com/lista/elado lakas budapest?page=' str(current_page))
try:
listings=WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((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__parameters')[0].text
data['Labels'] = listing.find_elements_by_css_selector('div.listing__labels')[0].text
data['URL'] = listing.find_elements_by_css_selector('a.listing__link.js-listing-active-area')[0].get_attribute('href')
df = df.append(data, ignore_index=True)
except:
print('Error')
current_page = 1
print(len(listings))
print(df)
Импорт
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC