使用Python与Selenium结合schedule实现定时表单输入
实现WebDriver等待指定时间后执行表单输入
直接通过计算当前时间与目标时间的差值来实现等待,比使用schedule库更简洁,且不会阻塞后续脚本执行,具体实现如下:
修改后的完整代码
import datetime 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 from selenium.webdriver.chrome.options import Options import time # 初始化Chrome浏览器(根据实际使用的浏览器调整) chrome_options = Options() # 可选:添加无头模式、禁用GPU等配置 # chrome_options.add_argument("--headless=new") driver = webdriver.Chrome(options=chrome_options) # 打开目标网页 driver.get("你的目标页面URL") # 等待日历元素加载完成 WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.XPATH, "//div[@id='datediv']")) ) calendar = driver.find_element(By.XPATH, "//input[@id='datetxt']") # 定义目标执行时间:每周三17:00 target_time = datetime.datetime.now().replace(hour=17, minute=0, second=0, microsecond=0) # 如果当前时间已经过了本周三17:00,自动顺延到下周三 if datetime.datetime.now() > target_time: target_time += datetime.timedelta(days=7) # 计算需要等待的秒数 wait_seconds = (target_time - datetime.datetime.now()).total_seconds() print(f"将等待{wait_seconds:.2f}秒,到{target_time.strftime('%Y-%m-%d %H:%M:%S')}执行输入") time.sleep(wait_seconds) # 执行表单输入操作(确保bookingdate_day变量已提前定义) calendar.send_keys(bookingdate_day) # -------------------------- # 这里添加脚本剩余部分的代码 # 比如提交表单、操作其他元素等 # -------------------------- # 完成后关闭浏览器 driver.quit()
关键说明
- WebDriver初始化:原代码缺失浏览器启动逻辑,这里补充了Chrome的初始化代码,你可以根据实际使用的浏览器(如Firefox、Edge)替换对应的
webdriver类。 - 目标时间处理:自动判断当前时间是否已过本周三17:00,若已过则顺延到下一周,避免无效等待。如果是固定日期(而非每周重复),直接定义
target_time = datetime.datetime(2024, 10, 15, 17, 0, 0)即可。 - 等待逻辑:通过
total_seconds()计算时间差,用time.sleep()实现精准等待,等待结束后直接执行后续代码,不会像schedule的无限循环那样阻塞流程。 - 后续脚本执行:输入操作完成后,直接在注释区域添加剩余业务逻辑即可,无需额外处理循环退出问题。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

