Python硒错误随机发生:元素未附加到页面文档



在我的python selenium项目中,我从网站上抓取数据时,随机发生了一个错误。它可以获取日期、温度、风和降雨量。脚本有时运行正常,但其他时候会弹出错误:

selenium.com.mon.exceptions.StaleElementReferenceException:消息:陈旧的元素引用:元素未附加到页面文档(会话信息:chrome=84.0.4147.141(

完整代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
from datetime import datetime
import schedule
import time
def job():
url="https://pent.no/60.19401,11.09936"
dates = "forecast-day-view-date-bar__date"
times = "forecast-hour-view-hour-label"
temps = "forecast-hour-view-weather-widget__temperature"
winder = "forecast-hour-view-weather-widget__wind-speed"
rainfalls = "forecast-hour-view-weather-widget__precipitation"
driver = webdriver.Chrome()
driver.get(url)
date = driver.find_elements_by_class_name(dates)
i = 0

for klikk in dates:
date[i].click()
i = i +1
if i==len(date):
break
time = driver.find_elements_by_class_name(times)
temp = driver.find_elements_by_class_name(temps)
temp2 = temp[::2]
temp3 = temp[1::2]
wind = driver.find_elements_by_class_name(winder)
wind2 = wind[::2]
wind3 = wind[1::2]
rainfall = driver.find_elements_by_class_name(rainfalls)
rainfall2 = rainfall[::2]
rainfall3 = rainfall[1::2]
a = []
b = []
c = []
d = []
e = []
f = []
g = []
h = []
#    
for datoer in date:
print(datoer.text)
a.append(datoer.text)
a.extend([""]*23)
df1 = pd.DataFrame(a, columns= ["Date"])
print(df1)

#
for tider in time:
print(tider.text)
b.append(tider.text)

df2 = pd.DataFrame(b, columns= ["Time"])
#  
for tempyr in temp2:
print(tempyr.text)
c.append(tempyr.text)

df3 = pd.DataFrame(c, columns= ["Temp Yr"])
for tempstorm in temp3:
print(tempstorm.text)
d.append(tempstorm.text)

df4 = pd.DataFrame(d, columns= ["Temp Storm"])
#   
for windyr in wind2:
print(windyr.text)
e.append(windyr.text)

df5 = pd.DataFrame(e, columns= ["Wind Yr"])
for windstorm in wind3:
print(windstorm.text)
f.append(windstorm.text)

df6 = pd.DataFrame(f, columns= ["Wind Storm"])
#   
for rainfallyr in rainfall2:
g.append(rainfallyr.text)
print(rainfallyr.text)

df7 = pd.DataFrame(g, columns= ["Rainfall Yr"])
df7 = df7.replace(r'^s*$', "0.0 mm", regex=True)

for rainfallstorm in rainfall3:
h.append(rainfallstorm.text)
print(rainfallstorm.text)

df8 = pd.DataFrame(h, columns= ["Rainfall Storm"])
df8 = df8.replace(r'^s*$', "0.0 mm", regex=True)
#
tabell = [df1, df2, df3, df4, df5, df6, df7, df8]
result = pd.concat(tabell, axis=1)
result.to_excel("weather" + str(int(datetime.now().day)) + ".xlsx")

driver.quit()

schedule.every().day.at("00:00").do(job)
while 1:
schedule.run_pending()
time.sleep(1)

我感到困惑的是,您正在循环使用dates,这是代码中的字符串

dates = "forecast-day-view-date-bar__date"
date = driver.find_elements_by_class_name(dates)
for klikk in dates:
# 1st loop -> klikk = 'f'
# 2st loop -> klikk = 'o'
date[i].click()
i = i +1
if i==len(date):
break

我认为你可以做的是,因为你想切换页面上的所有选项卡。

dates = "forecast-day-view-date-bar__date"
dates = driver.find_elements_by_class_name(dates) # assign as dates not date
for date in dates:
date.click()

对于你的问题,这正是@Nic Laforge所说的,移动这些行:

for datoer in date:
print(datoer.text)
a.append(datoer.text)
a.extend([""]*23)

循环之前:

for klikk in dates:
date[i].click()
i = i +1
if i==len(date):
break

最新更新