| 
			 import time 
			import json 
			from selenium import webdriver 
			from selenium.webdriver.chrome.service import Service 
			from selenium.webdriver.common.keys import Keys 
			path = r'D:\game\chromedriver.exe' 
			  
			  
			def browser_initial(): 
			    """" 
			    进行浏览器初始化 
			    """ 
			    # os.chdir('E:\\pythonwork') 
			  
			    # 1.将加载项配置到启动浏览器中 打开/创建浏览器对象 
			    browser = webdriver.Chrome(service=Service(path)) 
			    # 2.网址 https://kyfw.12306.cn/otn/resources/login.html -- 登录界面 
			    # https://kyfw.12306.cn/otn/leftTicket/init 选票界面可以 判断是否登录 
			    log_url = 'https://kyfw.12306.cn/otn/leftTicket/init' 
			    return log_url, browser 
			  
			  
			def get_cookies(browser): 
			    """ 
			    获取cookies保存至本地 
			    """ 
			    browser.get(log_url) 
			    time.sleep(15)  # 进行扫码 
			    # selenium_login(browser) 
			    # print("登录成功") 
			    dictCookies = browser.get_cookies()  # 获取list的cookies 
			    string_Cookies = json.dumps(dictCookies)  # 转换成字符串保存 
			    with open('string_cookies.json', 'w') as f: 
			        f.write(string_Cookies) 
			    print('cookies保存成功!') 
			  
			def login_cookie(log_url, browser): 
			    """ 
			    从本地读取cookies并刷新页面,成为已登录状态 
			    """ 
			    # 这个是12306的登录界面 https://kyfw.12306.cn/otn/resources/login.html 
			    # browser.get(log_url) 
			    with open('string_cookies.json', 'r', encoding='utf8') as f: 
			        listCookies = json.loads(f.read()) 
			  
			    # 往browser里添加cookies 
			    for cookie in listCookies: 
			        # cookie_dict = { 
			        #     'domain': cookie.get('domain'), 
			        #     # "expires": cookie.get('value'), 
			        #     'httpOnly': cookie.get('httpOnly'), 
			        #     'name': cookie.get('name'), 
			        #     'path': cookie.get('path'), 
			        #     "sameSite": "Lax", 
			        #     'Secure': cookie.get('Secure'), 
			        #     'value': cookie.get('value'), 
			        # } 
			        browser.add_cookie(cookie) 
			    # browser.refresh() 
			    time.sleep(1) 
			    # 如果是已登录的界面,可以免登录直接进 https://kyfw.12306.cn/otn/view/index.html 
			    # https://www.12306.cn/index/ --12306官网首页 
			    browser.get(log_url) 
			    return browser 
			  
			def selenium_run(driver): 
			  
			    # 11.1 选择出发的城市--点击那个框 
			    driver.find_element(by="css selector", value="#fromStationText").click() 
			    # 11.2 选择出发的城市--选择城市 
			    driver.find_element(by="css selector", value="#fromStationText").send_keys(login["from_city"]) 
			    # 11.3 选择出发的城市--回车确定 
			    driver.find_element(by="css selector", value="#fromStationText").send_keys(Keys.ENTER) 
			  
			    # 12.1 选择目的的城市--点击那个框 
			    driver.find_element(by="css selector", value="#toStationText").click() 
			    # 12.2 选择目的的城市--选择城市 
			    driver.find_element(by="css selector", value="#toStationText").send_keys(login['to_city']) 
			    # 12.3 选择目的的城市--回车确定 
			    driver.find_element(by="css selector", value="#toStationText").send_keys(Keys.ENTER) 
			  
			    # 13.1 选择出发的日期--点击那个框 
			    driver.find_element(by="css selector", value="#train_date").clear() 
			    # 12.2 选择出发的日期--选择城市 
			    driver.find_element(by="css selector", value="#train_date").send_keys(login['train_date']) 
			    # 12.3 选择出发的日期--回车确定 
			    driver.find_element(by="css selector", value="#train_date").send_keys(Keys.ENTER) 
			    # # 12.4 点击--显示全部可预订的车次 
			    # driver.find_element(by="css selector", value="avail_ticket").click() 
			    # 12.5 点击查询 
			    driver.implicitly_wait(5) 
			    driver.find_element(by="css selector", value="#query_ticket").click() 
			    # num = int(input('请输入您想要的车次:')) 
			    # 点击预订按钮 -- 选择要预定的是第几躺车 -- 这个代码没有问题 
			    # driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click() 
			  
			    # //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。 
			    ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]') 
			    ticket_num = ticket_list[login['num']].get_attribute("id") 
			    ticket_pre = ticket_num + ' > td.no-br' 
			    # 12.6 点击想要车次的预定按钮 
			    driver.find_element(by="css selector", value=f"#{ticket_pre}").click() 
			  
			    # 13.1 勾选想要的乘车人 
			    driver.find_element(by="css selector", value='#normalPassenger_0').click() 
			  
			    # 13.2 提交订单 
			    driver.find_element(by="css selector", value='#submitOrder_id').click() 
			    driver.implicitly_wait(5) 
			    # 13.3 选择靠窗的1F的位置 #erdeng1 > ul:nth-child(4) > li:nth-child(2) 是在浏览器右键copy selector选择出来的 
			    # # 1F是不可以选中的 
			    driver.find_element(by="css selector", value='#erdeng1 > ul:nth-child(4) > li:nth-child(2)').click() 
			    # 13.4 再次确认提交 
			    time.sleep(1) 
			    # 如果此处没有响应多点击就好 -- 加上 "try -- except" 
			    # driver.find_element(by="css selector", value='#qr_submit_id').click() 
			    # driver.find_element(by="css selector", value='#qr_submit_id').click() 
			    # driver.find_element(by="css selector", value='#qr_submit_id').click() 
			  
			  
			  
			f = open('login.json', encoding='utf-8').read() 
			login = json.loads(f) 
			  
			if __name__ == "__main__": 
			    log_url, browser = browser_initial() 
			    browser.get(log_url) 
			    # 1.二维码登录 保存 -- cookie -- 用完关掉 
			    # get_cookies(browser) 
			    # 计算程序运行时间 
			    # start = time.perf_counter() 
			    # 2.自动登录 
			  
			    driver = login_cookie(log_url, browser) 
			    # # 如果没有登录那就自动登录 -- 然后获得cookie自动保存 
			    # # if browser.find_element(by="css selector", value="#login_user").text == "登录": 
			    # # 3.自动买票 
			    selenium_run(driver) 
			    # end = time.perf_counter() 
			    # runTime = end - start 
			    # runTime_ms = runTime * 1000 
			    # # 输出运行时间 
			    # print("运行时间:", runTime, "秒") 
			    # print("运行时间:", runTime_ms, "毫秒") 
			 |