import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置秒杀时间和商品链接
buy_time = "2023-06-01 10:00:00"
url = "https://www.example.com/product"
# 获取当前时间
now_time = time.time()
# 计算距离秒杀时间还有多少秒
target_time = time.mktime(time.strptime(buy_time, "%Y-%m-%d %H:%M:%S"))
secs_to_buy = int(target_time - now_time)
# 等待至秒杀时间
print(f"等待到达秒杀时间:{buy_time}")
time.sleep(secs_to_buy)
# 自动打开浏览器,并访问商品页面
browser = webdriver.Chrome()
browser.get(url)
# 等待加载商品信息
wait = WebDriverWait(browser, 10)
buy_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@class="buy-btn"]')))
buy_btn.click()
submit_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@class="submit-btn"]')))
submit_btn.click()
# 关闭浏览器
browser.quit()
print("购买完成!")
在这个版本中,我们使用了 find_element 和 expected_conditions 进行相关元素的定位。
首先注意到我们从 selenium.webdriver.common.by 模块中引入了 By,这使得我们可以通过不同的策略选项来定位元素。例如,通过名称、类名或Xpath等。
然后,我们使用 WebDriverWait 和 expected_conditions 的组合以避免在页面加载过慢的情况下发生异常,等待购买和提交按钮可见并点击。
这种方法的优点是更加健壮和安全。尤其在复杂的网站上,使用这种方式操作元素可以大量减少失败率,从而编写出更高质量的自动化测试用例。