python - Python + Selenium 中的 while 循环问题
问题描述
你能告诉我为什么我的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 个周期,以免任何人超载,但理想情况下,我想浏览所有页面。
解决方案
只需将代码安排在您的 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
推荐阅读
- google-apps-script - 从 Rhino 切换到 V8 导致错误代码 PERMISSION_DENIED
- r - 部署以生成网站后出现闪亮错误
- sql - 雪花 - 检查字符串是否为字母数字?
- docker - Artifactory 在每次重新启动时重新创建内置证书
- solr - 用于翻译文档索引的 apache solr
- python - 如何根据条件将数据框中的列合并到另一个?
- sinatra - sinatra v1.4.8 没有从配置中选择正确的端口
- python - 绘制多种算法的精确召回曲线
- asp.net-core - 将 .Net Core 3.1 Web 应用程序部署到 IIS 后登录问题
- memory - 使用 posix_memalign 将数组初始化为零?