常规代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 访问小米网页
driver.get("https://www.mi.com")
time.sleep(2)
# 点击登录按钮
# driver.find_element_by_css_selector('#J_siteUserInfo>a:nth-child(1)').click()
driver.find_element_by_xpath('//a[text()="登录"]').click()
time.sleep(2)
# 处理用户协议,点击同意。一般用户协议只在第一次时出现,使用if处理
# btns = driver.find_element_by_class_name("btn-primary")
btns = driver.find_element_by_xpath('//button[text()="同意"]').click()
if btns:
btns[0].click()
# 输入用户名密码
driver.find_element_by_id("username").send_keys("username")
driver.find_element_by_id("pwd").send_keys("*******")
# 点击登录
driver.find_element_by_id("login-button").click()
time.sleep(2)
# 搜索商品
driver.find_element_by_id("search").send_keys("小米10 Pro\n")
time.sleep(2)
# 选择第一个商品
driver.find_element_by_xpath('//div[@class="goods-list clearfix"]/div[1]/div/a').click()
time.sleep(5)
# 切换到新窗口——商品详情页面
for handle in driver.window_handles:
driver.switch_to.window(handle)
# 判断切换到目标窗口的标题是否为:小米10 Pro立即购买-小米商城
if "小米10 Pro立即购买-小米商城" == driver.title:
print("已经切换到新窗口")
break
# 点击加入购物车
time.sleep(3)
driver.find_element_by_xpath('//a[text()="加入购物车"]').click()
# 检查是否成功登录
res = driver.find_element_by_css_selector(".goods-info>span").text
assert '小米10 Pro 全网通版' in res
print("加入购物车成功")
# 退出浏览器
driver.quit()
代码模块化
# 首页
class IndexPage():
def __init__(self,driver):
self.driver = driver
# 访问小米网页,确保处于首页
self.driver.get("https://www.mi.com")
# time.sleep(2)
def to_login(self):
# 点击登录按钮
self.driver.find_element_by_xpath('//a[text()="登录"]').click()
# time.sleep(2)
# 处理用户协议,点击同意。一般用户协议只在第一次时出现,使用if处理
btns = self.driver.find_element_by_xpath('//button[text()="同意"]').click()
if btns:
btns[0].click()
# 返回登录页对象
return LoginPage(self.driver)
# 登录页
class LoginPage():
def __init__(self,driver):
self.driver = driver
def login(self,username,psw):
# 输入用户名密码
self.driver.find_element_by_id("username").send_keys(username)
self.driver.find_element_by_id("pwd").send_keys(psw)
# 点击登录
self.driver.find_element_by_id("login-button").click()
# time.sleep(2)
# 返回首页对象
return IndexPage(self.driver)
# 搜索商品
def search_item(self):
self.driver.find_element_by_id("search").send_keys("小米10 Pro\n")
return GoodItemsPage(self.driver)
# def search_item(self,item="小米10 Pro"):
# # 搜索商品
# self.driver.find_element_by_id("search").send_keys(item+'\n')
# # time.sleep(2)
# return GoodItemsPage(self.driver)
# 商品页面
class GoodItemsPage():
def __init__(self,driver):
self.driver = driver
def pick_item(self):
# 选择第一个商品
self.driver.find_element_by_xpath('//div[@class="goods-list clearfix"]/div[1]/div/a').click()
# time.sleep(5)
# 切换到新窗口——商品详情页面
for handle in driver.window_handles:
driver.switch_to.window(handle)
# 判断切换到目标窗口的标题是否为:小米10 Pro立即购买-小米商城
if "小米10 Pro立即购买-小米商城" == driver.title:
print("已经切换到新窗口")
return ItemPage(self.driver)
# 商品详情页
class ItemPage():
def __init__(self,driver):
self.driver = driver
def add_to_cart(self):
# 点击加入购物车
# time.sleep(3)
self.driver.find_element_by_xpath('//a[text()="加入购物车"]').click()
return ShopCartPage(self.driver)
# 购物车页面
class ShopCartPage():
def __init__(self,driver):
self.driver = driver
def check_item(self):
# 检查是否成功登录
res = self.driver.find_element_by_css_selector(".goods-info>span").text
assert '小米10 Pro 全网通版' in res
print("加入购物车成功")
if __name__ == "__main__":
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 使用类调用函数
a = IndexPage(driver).to_login()
a.login("username","******")
a.search_item().pick_item().add_to_cart().check_item()