阿里大药房自动化购买药品,原来这么简单!
2023-11-18 17:11:01
用 Python 和 Selenium 自动化在阿里大药房购买药品
在当今数字时代,自动化正成为各种任务中的常见做法,包括 web 应用的交互。通过利用 Python 和 Selenium,我们可以创建脚本来执行许多繁琐的任务,例如自动在网上购物。在本文中,我们将深入探讨如何使用这些强大的工具在阿里大药房上自动化药品购买过程。
开发环境
在你着手自动化脚本之前,确保你的开发环境已准备就绪至关重要。以下是必要的先决条件:
- Python 3.8 或更高版本
- PyCharm 专业版(可选,但推荐)
- pip install selenium==3.141.0
编写自动化脚本
现在,让我们开始编写我们的自动化脚本。我们将使用 Selenium 与阿里大药房网站进行交互。
# 导入必要的 Selenium 库
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
# 设置浏览器驱动
driver = webdriver.Chrome()
# 访问阿里大药房网站
driver.get("https://www.aliyundrugstore.com/")
# 查找搜索栏并输入药品名称
search_bar = driver.find_element(By.ID, "searchInput")
search_bar.send_keys("连花清瘟胶囊")
# 点击搜索按钮
search_button = driver.find_element(By.ID, "searchBtn")
search_button.click()
# 等待搜索结果加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "search_result_item")))
# 获取第一个搜索结果
first_result = driver.find_element(By.CLASS_NAME, "search_result_item")
# 点击第一个搜索结果
first_result.click()
# 等待药品详情页加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "product-detail")))
# 获取药品信息
product_name = driver.find_element(By.ID, "productName").text
product_price = driver.find_element(By.ID, "productPrice").text
# 添加药品到购物车
add_to_cart_button = driver.find_element(By.ID, "addToCart")
add_to_cart_button.click()
# 等待购物车加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "shopping-cart")))
# 点击购物车
shopping_cart = driver.find_element(By.ID, "shopping-cart")
shopping_cart.click()
# 等待购物车页面加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "cart-detail")))
# 获取购物车信息
cart_items = driver.find_elements(By.CLASS_NAME, "cart-item")
# 遍历购物车中的物品
for item in cart_items:
item_name = item.find_element(By.CLASS_NAME, "item-name").text
item_price = item.find_element(By.CLASS_NAME, "item-price").text
print(f"物品名称:{item_name},物品价格:{item_price}")
# 点击结算按钮
checkout_button = driver.find_element(By.ID, "checkout-btn")
checkout_button.click()
# 等待结算页面加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "checkout-form")))
# 获取结算信息
delivery_address = driver.find_element(By.ID, "deliveryAddress").text
payment_method = driver.find_element(By.ID, "paymentMethod").text
order_total = driver.find_element(By.ID, "orderTotal").text
# 打印结算信息
print(f"收货地址:{delivery_address}")
print(f"支付方式:{payment_method}")
print(f"订单总额:{order_total}")
# 点击提交订单按钮
submit_order_button = driver.find_element(By.ID, "submitOrder")
submit_order_button.click()
# 等待订单提交成功
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "order-success")))
# 获取订单号
order_number = driver.find_element(By.ID, "orderNumber").text
# 打印订单号
print(f"订单号:{order_number}")
# 关闭浏览器
driver.quit()
处理动态元素
在自动化 web 应用时,处理动态元素至关重要。Selenium 提供的 WebDriverWait
和 expected_conditions
可以帮助我们应对这种挑战。在我们的脚本中,我们使用了 WebDriverWait
来等待元素加载,并使用了 EC.presence_of_element_located
来检查元素是否出现在 DOM 中。
常见问题解答
1. 如何在不同的浏览器上运行此脚本?
只需更改浏览器驱动程序即可。例如,对于 Firefox,使用 webdriver.Firefox()
。
2. 我收到一个找不到元素的错误。该怎么办?
检查你的元素选择器是否正确。确保 By
常量与正确的选择器类型(例如 ID、类或名称)匹配。
3. 脚本在加载特定页面时挂起。如何解决?
可以使用 WebDriverWait
来显式等待元素加载。例如,使用 EC.visibility_of_element_located
来等待元素可见。
4. 如何处理验证码?
处理验证码需要使用图像识别或第三方服务。请注意,阿里大药房可能已经实施了反机器人措施来防止自动化购买。
5. 我想扩展脚本以涵盖更多功能。如何实现?
你可以轻松地扩展脚本以涵盖其他功能,例如登录、查看订单历史记录或搜索特定商品。只需添加额外的 Selenium 命令并遵循相同的原则即可。
结论
使用 Python 和 Selenium 自动化在阿里大药房购买药品是一种高效而方便的方法。通过利用 Selenium 的强大功能和清晰的自动化脚本,你可以简化任务并节省宝贵时间。随着对 Selenium 和自动化实践的深入理解,你还可以创建更复杂和有效的自动化解决方案,为各种 web 应用提供便利。