【Selenium】利用Cookies登录京东并添加商品至购物车以及结算

import json
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

def get_JD_cookies():
    browser = webdriver.Firefox()
    browser.maximize_window()
    browser.implicitly_wait(2)

    url = "https://www.jd.com"
    browser.get(url)

    # 登陆前
    before_login = browser.get_cookies()

    # 定位,点击“请登录”
    browser.find_element_by_class_name("link-login").click()
    # browser.find_element_by_class_name("link-logout").click()
    sleep(5)
    # 定位,点击“账户登录”
    browser.find_element_by_link_text("账户登录").click()
    sleep(5)
    # 定位,输入账号
    username = browser.find_element_by_id("loginname")
    username.clear()
    username.send_keys(input("用户名:"))
    # 定位,输入密码
    password = browser.find_element_by_id("nloginpwd")
    password.clear()
    password.send_keys(input("密码:"))
    sleep(5)
    # 定位,点击登录
    browser.find_element_by_id("loginsubmit").click()

    sleep(20)
    # 人机验证
    # whole = browser.find_element_by_class_name("JDJRV-bigimg")
    # piece = browser.find_element_by_class_name("JDJRV-smallimg")
    # slider = browser.find_element_by_class_name("JDJRV-slide-inner JDJRV-slide-btn")

    # 登陆后
    after_login = browser.get_cookies()

    # 获取 cookies
    cookies = browser.get_cookies()
    # 将 cookies 写入文件
    with open("cookies.txt","w")  as f:
        json.dump(cookies, f)


class JDBuy(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass被执行")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass被执行")

    def setUp(self):
        print("Begin testing...")
        self.browser = webdriver.Firefox()
        self.url = "https://www.jd.com"
        self.browser.maximize_window()
        self.browser.implicitly_wait(2)
        # 访问网站,清空旧cookies信息
        self.browser.get(self.url)
        sleep(5)
        self.browser.delete_all_cookies()

        # 加载 cookies信息
        with open("cookies.txt","r") as f:
            cookies = json.load(f)
            for cookie in cookies:
                self.browser.add_cookie(cookie)

        # 验证是否登录成功
        self.browser.get(self.url)

    def tearDown(self):
        print("End testing...")
        self.browser.quit()

    def testAdd2Cart(self):
        browser = self.browser
        # 定位搜索框 输入 "iPhone"
        browser.find_element_by_id("key").send_keys("iPhone")
        browser.find_element_by_id("key").send_keys(Keys.RETURN)
        # browser.find_element_by_xpath("//button[@class='button']/i").click()
        # 定位  点击搜索按钮
        sleep(5)
        browser.find_element_by_class_name("gl-item").click()
        sleep(5)
        nwh = browser.window_handles[-1]
        browser.switch_to.window(nwh)
        browser.find_element_by_id("InitCartUrl").click()
        sleep(5)
        self.assertIn("商品已成功加入购物车", browser.title)
        # assert "商品已成功加入购物车" in browser.title

    def testBilling(self):
        browser = self.browser
        # 打开购物车
        browser.find_element_by_xpath("//div[@class='cw-icon']/a").click()
        sleep(5)
        nwh = browser.window_handles[-1]
        browser.switch_to.window(nwh)
        browser.find_element_by_link_text("去结算").click()
        sleep(5)
        self.assertIn("订单结算页", browser.title)
        sleep(2)
        browser.find_element_by_id("order-submit").click()
        sleep(2)
        self.assertIn("收银台", browser.title)


if __name__ == "__main__":
    # get_JD_cookies()
    unittest.main()

原文地址:https://www.cnblogs.com/4thirteen2one/p/11456690.html