如何用Selenium/Python获取网站系统时间以精准预约露营地
解决露营地预约脚本的时间同步问题
核心问题修正
你之前获取网站时间的方法错误,driver.get()是用于加载网页的API,要获取页面元素的时间文本,需使用元素定位方法提取内容。以下是完整解决方案:
步骤1:正确获取网站系统时间
网站的系统时间在id="systemTime"的div元素中,先等待元素加载完成,再提取其文本内容。使用WebDriverWait可避免元素未加载导致的报错。
步骤2:解析网站时间为可计算的datetime对象
确认网站时间的格式(比如YYYY-MM-DD HH:MM:SS或带时区的格式),用datetime.strptime解析成datetime对象,注意时区要和目标时间保持一致。
修改后的完整代码
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import datetime import time # 滚动到预约按钮 driver.execute_script("arguments[0].scrollIntoView()", resbutton) # 目标预约时间(注意时区要和网站时间一致) target = datetime.datetime(2023, 3, 14, 7, 0, 1) def sleep_until(target): # 等待网站系统时间元素加载完成 system_time_elem = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "//div[@id='systemTime']")) ) # 提取网站时间文本,假设格式为"2023-03-14 07:00:00",根据实际格式调整 site_time_str = system_time_elem.text.strip() # 解析为datetime对象,格式符需匹配网站显示的时间格式 now = datetime.datetime.strptime(site_time_str, "%Y-%m-%d %H:%M:%S") delta = target - now if delta > datetime.timedelta(0): # 减去0.01秒缓冲抵消网络延迟,确保网站时间达标后再操作 time.sleep(delta.total_seconds() - 0.01) return True # 等待到目标时间后点击预约按钮 sleep_until(target) resbutton.click()
注意事项
- 务必根据网站实际显示的时间格式调整
strptime的格式符,若网站时间带时区,需用pytz库处理时区转换。 - 缓冲时间可根据实际网络情况微调,避免因延迟导致的操作偏差。
内容的提问来源于stack exchange,提问作者flatspotting
相关产品推荐
相关产品推荐

