某IE订位源码分享与交流

某IE订位源码分享与交流

在这里插入图片描述
最近发现之前发布的客户端也不起好大作用了。刚好又是封控。真的日子难过啊。饭都吃不起了。呜呜
近来疫情封控在家,提起此IE就想起了2021年的哪场冬天,冷的心噶蹦碎…… 直到现在都没有心情再来考试,就算考试也得有位置啊。不说这些了。来到正文:
不久前网站也进行的更新,专业来说做了升级,反爬,技术就是不断的再更新,可惜,现在做什么都越来越难,发现先前的代码不能高效率跑了,有点灰心……
现在就此分享我整个程序中的一部分代码,整个逻辑都还是比较清晰,此部分代码是整个程序的一部分,因此代码为配合整个程序,有些代码没有做删减,可以直接运行测试。因帐号而异要做适当调整,比如帐号我不能给你噻。如有大佬能完善文章留言,。
为什么说不能高效率呢:
高效率就是可以理解为不用人工干预,放在服务器上,利用requests,xhttp等模拟人工登陆->利用许多帐号查询日期,->有日期->订位,
为什么不能成功呢,个人理解估计后端有反爬检测cookies中什么参数来判断是不是真实人的操作。希望有大佬能解决此问题。
面对此网站还是相当棘手:
1:模拟人工登陆:
虽然成功。但最后订位却不能行。不知道怎么搞了
2:日历框:
现在不能通过js方式人工通过日历输入框注入日期,网站已经升级,通过逆向get的方式也难于拼接相关参数,利用selenim点击也是难以定位,为什么呢,看图有三个表你不能确定应该点左边,还是中间,还是右边,只能对页面有位置就点。做不到判断。
3:利用selenium携带cookies实现免登录方式也不行,网址会自己跳转而不能加载cookie,相关文章可以参数如下网址也是没招了:
相关参考文章如下
https://blog.csdn.net/weixin_43821172/article/details/105199481
https://blog.csdn.net/weixin_44634558/article/details/122671427
4:就是可恶的次数限制。一天刷不了几次,没有以前哪么好搞了。
此次的代码是基于selenium得到cookie,如能通过得到的cookies来request最后定位成功哪就太beautiful。如有不足这处还请留言,希望有大佬能解决。

import requests
import datetime
import time
import re
import pickle
import json
import os
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import Select
from loadcookies import cSite
# 由于get()方法是等待加载完成,才往下执行,就让它不进行加载完成
# from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# desired_capabilities = DesiredCapabilities.CHROME
# desired_capabilities["pageLoadStrategy"] = "none"

requests.packages.urllib3.disable_warnings()


class CcieCookies(object):
    def __init__(self, username, password, browser):
        self.url = 'https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline'
        self.browser = browser
        self.wait = WebDriverWait(self.browser, 20)
        self.username = username
        self.password = password

    def element_class_visible(self, element_class, timeout=10):
        """
        等待某元素可见,默认超时10秒
        :param element_class:元素路径
        :param timeout: 超时时间
        :return: 等待结果
        """
        try:
            ui.WebDriverWait(self.browser, timeout).until(ec.visibility_of_element_located((By.CLASS_NAME, element_class)))
            return True
        except TimeoutException:
            return False

    def open(self):
        """
        打开网页输入用户名密码并点击
        :return: status/cookies
        """
        self.browser.delete_all_cookies()
        # options = webdriver.ChromeOptions()
        # options.add_argument("start-maximized")
        # options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
        # self.browser = webdriver.Chrome(options=options)
        self.browser.get(self.url)
        self.browser.find_element(By.NAME, 'pf.username').send_keys(self.username)
        print("已输入邮箱")
        time.sleep(3)
        try:
            self.browser.find_element(By.ID, "onetrust-accept-btn-handler").click()
            print("已点击接受")
        except Exception as e:
            print(e)
        try:
            self.browser.find_element(By.NAME, 'login-button').click()
            # '//*[@id="passwordInput"]'
            print("已点击下一步")
            time.sleep(9)
            # self.browser.implicitly_wait(10)  # 设置隐式等待
            # driver.implicitly_wait(10)  # 设置智能等待10秒
            try:
                self.browser.find_element(By.ID, "onetrust-accept-btn-handler").click()
                print("已点击接受")
            except Exception as e:
                print(e)
            locator = (By.ID, "okta-signin-password")
            wait = WebDriverWait(driver=self.browser, timeout=10, poll_frequency=1)
            ele = wait.until(ec.element_to_be_clickable(locator))
            ele.send_keys(self.password)
            time.sleep(3)
            print("已输入密码")
        except Exception as e:
            print(e)
            try:
                self.browser.find_element(By.ID, "onetrust-accept-btn-handler").click()
                print("已点击接受")
            except Exception as e:
                print(e)
            finally:
                page = self.browser.page_source
                print(page)
                locator = (By.ID, "passwordInput")
                wait = WebDriverWait(driver=self.browser, timeout=10, poll_frequency=1)
                ele = wait.until(ec.element_to_be_clickable(locator))
                ele.send_keys(self.password)
                print("已输入密码")
        time.sleep(60)
        try:
            self.browser.find_element(By.ID, "onetrust-accept-btn-handler").click()
            print("已点击接受")
        except Exception as e:
            print(e)
        try:
            login_button = self.browser.find_element(By.XPATH, '//*[@id="okta-signin-submit"]')
            login_button.click()
        except Exception as j:
            print(j)
            login_button = self.browser.find_element(By.XPATH, '//*[@id="login-button"]')
            login_button.click()
        time.sleep(5)
        print("已点击登陆")
        time.sleep(20)
        page = self.browser.page_source
        # print(page)
        res_other = re.search(u"Application exception occured. Please try again later.", page)
        res_error = re.search(u"无法登录。请查收我们发出的电子邮件并重置密码,或者重新尝试。", page)
        res_unavailable = re.search(u"This site is temporary unavailable. Please contact system administration team.", page)
        res_error_2 = re.search(u"我们找到一些错误。请检查表单并更正。", page)
        res_sucess = re.search(u"welcome", page)
        if res_error is None:
            if res_error_2 is None:
                if res_unavailable is None:
                    if res_sucess is not None:
                        print("成功登陆!")

                        """
                        # 此调用自定义的函数返回可用日期用于日历框输入日期然后下一步,目前网站升级已失效,不能达成目标
                        book = False  # 表示没有订
                        # soft_id = "272077801"
                        soft_id = "274001944"
                        location = 'Dubai'
                        v_d, lab_location, qi, zj, hm = cSite(book, soft_id).all_day_search_2(location)
                        # booklabDate = '4/12/2023'
                        # booklabDate_zh ='April 12, 2023'
                        booklabDate_zh = qi + '/'+ zj + '/' + hm
                        print(booklabDate_zh)
                        # location = 'Dubai'
                        """
                        location = 'Dubai' #单独提出来,用于选择考场地点
                        v_d, lab_location, qi, zj, hm = cSite(book, soft_id).all_day_search_2(location) # 用于自定义函数返回是否有可用日期

                        book_button = self.browser.find_element(By.XPATH, '//*[@id="liExamSchedular"]/a/span')
                        book_button.click()
                        print("已点击Dashboard")
                        self.browser.implicitly_wait(10)  # 设置智能等待10秒

                        Select(self.browser.find_element(By.NAME, 'labLocation')).select_by_value(location)
                        time.sleep(1)
                        print("已选择好考场")

                        if v_d != '': #如果有日期了就开始
                            if element_class_visible(self.browser, 'selectable', timeout=10):
                                self.browser.find_element(By.CLASS_NAME, 'selectable').click()
                            else:
                                self.browser.find_element(By.CLASS_NAME, 'calnavright').click()
                                self.browser.find_element(By.CLASS_NAME, 'calnavright').click()
                                self.browser.find_element(By.CLASS_NAME, 'calnavright').click()
                                if element_class_visible(self.browser, 'selectable', timeout=1):
                                    self.browser.find_element(By.CLASS_NAME, 'selectable').click()
                                else:
                                    self.browser.find_element(By.CLASS_NAME, 'calnavleft').click()
                                    self.browser.find_element(By.CLASS_NAME, 'calnavleft').click()
                                    self.browser.find_element(By.CLASS_NAME, 'calnavleft').click()
                                    if element_class_visible(self.browser, 'selectable', timeout=10):
                                        self.browser.find_element(By.CLASS_NAME, 'selectable').click()
                        print('Have available seat')
                        driver.find_element(By.ID, 'formbutton').click()
                        print('已点击formbutton了')
                        wait.WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'policyButton'))).click()
                        print('已点击Policy了')
                        wait.WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'conductButton'))).click()
                        print('已点击conductButton了')
                        wait.WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'primary130'))).click()
                        print('已点击提交了')

                        """
                        js = "$('input[id=date1]').attr('readonly',false)"
                        self.browser.execute_script(js)  # 执行js
                        # self.browser.find_element(By.XPATH, '//*[@id="date1"]').clear()  # 定位日期下拉框(此时的下拉框已经可以输入了)
                        # self.browser.find_element(By.XPATH, '//*[@id="date1"]').send_keys(booklabDate_zh)  # 定位日期下拉框(此时的下拉框已经可以输入了)
                        # input_date.click()  # 输入完执行点击,使数据存入
                        # input_date.send_keys(booklabDate_zh)
                        """

                        """
                        time.sleep(0.5)
                        # 用js方法输入日期
                        js_value = f'document.getElementById("labDate").value="4/12/2023"'
                        self.browser.execute_script(js_value)
                        print("已选择好日期!%%%%%%%%%%%%%%%")
                        """
                        time.sleep(5000)

                        return {
                            'status': 1,
                            'content': self.get_cookies()
                        }
                    else:
                        print("超时!")
                        return {
                            'status': 3,
                            'content': "超时!"
                        }
                else:
                    print("This site is temporary unavailable. Please contact system administration team.")
                    return {
                        'status': 3,
                        'content': "This site is temporary unavailable. Please contact system administration team."
                    }
            else:
                print("我们找到一些错误。请检查表单并更正。")
                return {
                    'status': 4,
                    'content': "我们找到一些错误。请检查表单并更正。"
                }
        else:
            print("无法登录。请查收我们发出的电子邮件并重置密码,或者重新尝试。")
            return {
                'status': 2,
                'content': "This site is temporary unavailable. Please contact system administration team."
            }

    def get_cookies(self):
        """
        获取Cookies
        :return:
        """
        cookies = self.browser.get_cookies()
        # for cookie in cookies:
        #     if isinstance(cookie.get('expiry'), float):
        #         cookie['expiry'] = int(cookie['expiry'])
        pickle.dump(cookies, open("test" + ".pkl", "wb"))

        with open("cookies.json", "w", encoding="utf-8") as cks:  # 把cookies使用json保存
            json.dump(cookies, cks)
        return cookies

    def main(self):
        """
        破解入口
        :return:
        """
        sj = self.open()
        return sj

    @staticmethod  # 此方法最后一步不得行,只得另想办法
    def book_site(booklabDate_over, lablocation, cc):
        print('start book!')
        cand_id = '272077801'
        LabSchedule_url = 'https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/LabSchedule'
        my_cookies = requests.utils.cookiejar_from_dict(cc, cookiejar=None, overwrite=True)
        session = requests.Session()
        session.cookies = my_cookies
        data2 = {
            "labLoc": lablocation,  # 考场位置
            "labType": "Enterprise Infrastructure",
            "candID": cand_id,
            "getlabDate": "yes"
        }
        headers_9 = {
            'authority': 'ccie.cloudapps.cisco.com',
            # 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
            'accept': 'text/plain, */*; q=0.01',
            'accept-language': 'zh-CN,zh;q=0.9',
            # 'cache-control': 'max-age=0',
            # Requests sorts cookies= alphabetically
            # 'cookie': f"JSESSIONID=98F2097C76A870A706E127C081F2AC1B; anchorvalue=; oneid_locale=zh-CN; ak_bmsc=B9BCFFF32C1C66F5214D0527ACA47DBD~000000000000000000000000000000~YAAQdoFtaNRoRFKEAQAAK7B7aRELZP7w5RmPb09W/4QaXrBJobF5Ed6DfMJDbTThOhz8mBpgmHQnSngYLIhUj0FDS4geNxqAG6aY682WFc5eSFpqzwptDu2r2rhEmxnfiJgLgl54kPokD7+VsWqa+VCgOdarC3W7rjZ0oBTe45wpQjwtpnXV6orT2mv0X3uHhy7+4inoB1m2j+COhoxhi8LgUbMGKqw9tiXSP9MtKWgya/a67dSGmEeQbyro5NEvaBBq1sQSKN3WakKZ7zGUi5V9Ks3xMlA9g1p+g0qSUh2NqwUNCO59ZM+P5oWJir/tJ2gJwnbnMK0xGaFyODppRLv9ylITSnSHn7rk+mi7CiMgJ6x2FNA2K/U2w4MjMRc8h8Ed7KbdyLPj; bm_sz=F7752031FF0A4E6ADACC1F6263A8E883~YAAQdoFtaNVoRFKEAQAAK7B7aREhQvsYW/cdt8nS7Cknf6maarOXlJyXxMAqvQS37cgMk9Gait686RpWVb/WzjqC6klOAlQNDeGcKlt7aKw9hTxHYsAcd4dg6b8Gi9F3VmQcSx2SyTVO34bTDNfYI2/RtpsfKx+2LzyCbs2Z+0XF5ERDMz6+roQ4GD7hDph6mb5F7cK8Kcev/XDG5BBIbHxXNjaOyf7qSIEBf/UPr/XDtQLe8uaLKt6P7m1Qgm0TDkObNTxkxDUTWHhBxwCqAUBeP3B5zkhrAm63/3NSBhe11w==~3552819~3425860; bm_mi=477A244A654EC1D033B11934DFBE0EE3~YAAQdoFtaDtrRFKEAQAAm0V8aRGSxfe9kO+WbNNi3kpveul/xBrlHJ4oy9CoyJ0LzdUFFYtTg0YLd7Lyf4Q1UWgXh8Q0XCjo5rRe3Gph38luV1S74yWlUrmI7QfcUYQ/KMGY9S7N3DzyROhHLIoPCX3Anzmh8dfn8b7QnCulXQNfPVajI4WCk12f9eDhnPI28ym5nh4oCCRk1La4B3T5dlE17RhfjeIO4oicxBeVTRy24LPE/DFTEEEA6NXJHi+WKen8DiMD1WbyRyxBT0xudF8haLmEonssqMsGMSUnnD4ww2cLJ8M6yXKD0WHFzF2aS7e3eMStRy7Q+GmQkVUwt0Tx/j0TQsm1LQ==~1; utag_main=v_id:0184697c4d460012485773dfc2e70506f001b0670086e{_sn:1$_ss:1$_st:1668218864775$ses_id:1668217064775%3Bexp-session$_pn:1%3Bexp-session$ctm_ss:true%3Bexp-session;} _abck=927372A48792E29B93AF1A58580F3946~0~YAAQdoFtaHFrRFKEAQAAjE58aQj/VZl9QJ26V8tBOrM2mhVQXpzWFTM9lIuQSB74VHRtexz1YfCYcNmMroG7oo3f1nLON0kMN4toboAgewtQUtQbjFOU+6bGQdFz3xDe0gVlALJ+iV3c8tIJWPkNhg5CRcFhnvcSSnFvIz5TnomHkNWrO0n/6vQm/VkXqt4+bphtILt80eTGhy5jhjk2Cj97k8PwQfeA18so82geW/7GY1oQz+Du24bWoigQP/p/ZwCV5Rb87r3ZCTuvrs5Y7+UwbGnZ0TyY+3JNz+cS1mxXyfhbPsiGh/I7EVP1eRixU8e/ZtDV6f5m4WLx7WnxKMFe+lJnqtybfjpkeXgjHugdQSqQAfztDsIRhR935wdrJhheNFzmfXBpxXK5xrHxRaSWQsC+3FE=~-1~-1~-1; bm_sv=F0DD1E863B283D05A94B28A1E77C5FBD~YAAQdoFtaHJrRFKEAQAAjE58aREFcfOknqwZPqNjq7mVGqIiaOihcKWxBFrKgKGHEIoeZV7fEdmAhnZg/Eaa/YhbkOWiwKMgX3PCh3U33iz7wn0VLE50xDjf31Wa4a++XoUZDk8eb+5xemoZlF5260tfEK5XEYhz+OXiNc5S4MLZHA/v6HCg7AWlTpNg5mYmvLKlk8X2culpgp20vb1Z7zSkDQHX+Rnz3mFQMTurLLixyAHvXoQjq6Vs+CwG5TI=~1; OptanonConsent=isGpcEnabled=0&datestamp=Sat+Nov+12+2022+09%3A37%3A45+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=6.39.0&isIABGlobal=false&hosts=&consentId=69e460d2-8791-42ce-9cf5-a61dee5f6271&interactionCount=1&landingPath=https%3A%2F%2Fid.cisco.com%2Fsignin&groups=1%3A1%2C2%3A0%2C3%3A0%2C4%3A0; authorization=LoggedIn; wamsessiontracker=T1RLAQLquqPc7nT1fuaPsLnrnK7eFdbPaxAKMcssWYhnhWuz2sCGqNtgAACAsRuU3X1-cJVuLn_9mSg3RyanSJx_a7NGnjwOa38C3sOscPPgCeM2wSs2uoJAsxW6NQSgxD4QtVilvcrbM2RZ6A1jtlEjVp7OzfmN-J5Cv0dIs0Fisy2NZS8ekM3i2Gsr7e4kf7jRuEROH0wOKEEjwawakjCLexrC-T4lMYVK9XQ*; a4e3b748021f355449c7d8e36c22a0cb=401aa696fd11b916fe724565975f7ca0; cdc.cookie.newUser=1668821882881; s_cc=true; s_ria=flash%20not%20detected%7C; JSESSIONID=D3E472B5AC64D65E220E3B010F18C52B; s_sq=cisco-us%3D%2526pid%253Dhttps%25253A%25252F%25252Fccie.cloudapps.cisco.com%25252FCCIE%25252FSchedule_Lab%25252FCCIEOnline%25252FCCIEOnline%2526oid%253Dhttps%25253A%25252F%25252Fccie.cloudapps.cisco.com%25252FCCIE%25252FSchedule_Lab%25252FCCIEOnline%25252FCCIEOnline%252523%2526ot%253DA; s_pv=no%20value; CSPROD.CAEAXprod=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2Iiwia2lkIjoiLVZpaVlVZWI4a1lOem9DM1RLYWpEY1BFaldRIiwicGkuc3JpIjoiOEI1bFFsa2JVa0VyS2tqSUMxRmNIS3Z3MmFZLi5idmV5In0..IQ1ZgsOd28MPIoYgWxghVw.3NvhaUNe-6I1YULJW6qifCQtF0aeTQfxInvgSxIYcAgLSb4DeMpg_Js2Nnm52RLdFYh4HAVZsYjU6Lrie1H1ri31IwZnaVrB59cm-rXlQThUzuAjHVq_LOqzr-_0w8ahR-jmIgyBPcYx-Jl0D8Y5GJL_twtvCKT8PXqtx5eyzfTAWDwvplQT9CiZHBQ6z8S332d0FKMKdAtXfl0cJbiwWe8XpImZ-r8iKyDWckGW-8_1AgnXjIh9Vc182SNmZ3hGRmCFGikx3meE95n-T7rUUC6aNYXhIXUfoDmAd5uP76e8tiSepU7HvWbQP8se3tt8lfH96nz2EdY7GtshJSUwTOMFdquqVMPH_TUo0upgu4g.C9AniQTQ9Rih3hEZSWk7QA; s_dfa=cisco-us; cdc_ut=prevacct:cisco-preview{accesslevel:guest$ts:1668222789418$customEvents:$linktext:no%20clickable%20text$link:https%3A//ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/LabSchedule$elementtype:button$lpos:$linkhierarchy:%3A%3Ano%20clickable%20text$lid:;} s_ppv=%5B%5BB%5D%5D; s_nr=1668222890838-Repeat",
            'origin': 'https://ccie.cloudapps.cisco.com',
            'referer': 'https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline',
            'sec-ch-ua': '\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '\"Windows\"',
            # 'sec-fetch-dest': 'document',
            'sec-fetch-dest': 'empty',
            'sec-fetch-mode': 'cors',
            # 'sec-fetch-mode': 'navigate',
            'sec-fetch-site': 'same-origin',
            # 'sec-fetch-user': '?1',
            # 'upgrade-insecure-requests': '1',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
            'x-requested-with': 'XMLHttpRequest',
        }
        headers_99 = {
            'Host': 'ccie.cloudapps.cisco.com',
            'Accept-Encoding': 'gzip, deflate, br',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Origin': 'https://ccie.cloudapps.cisco.com',
            'Referer': 'https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline',
            'Sec-Fetch-Dest': 'document',
            'Sec-Fetch-Mode': 'navigate',
            'Sec-Fetch-Site': 'same-origin',
            'Sec-Fetch-User': '?1',
            # 'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
            'sec-ch-ua': '\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '\"Windows\"',
        }
        try:
            resp = session.post(url=LabSchedule_url, headers=headers_9, data=data2, verify=False, timeout=10)  # 走个过程
            print(resp.text)
        except Exception as e:
            print(e)

        data5 = {
            "labLocation": lablocation,
            "labType": "Enterprise Infrastructure",
            "candID": cand_id,
            "labdate": booklabDate_over,
            "transactionType": "LAB",
            "checkRules": "yes"
        }  # 选择好位置后点击下一步!

        data9 = {
            "labType": "ENT_INF",
            "hiddenlabType": "Enterprise Infrastructure",
            "attemptNum": "3",
            "labID": cand_id,
            "sysdate": str(datetime.date.today().strftime("%m/%d/%Y")),
            "lablocation": lablocation,
            "labLoc": lablocation,
            "date1": "April 12, 2023", #因此py文件是整个程序的一部分,此处手工转换测试
            "labDate": booklabDate_over,
            "onlineCCPaymentStatus": "Y",  # 值是Y不确定
            "onlinePaymentWindow": "30",
            "txtProxyVoucherNumber": "NOT_REQUIRED",
            "policyAgree": "on",
            "conductAgree": "on"
        }  # 最终确认位置!
        print(cand_id, lablocation, booklabDate_over)
        print(type(booklabDate_over))
        try:
            response5 = session.post(url=LabSchedule_url, headers=headers_9, data=data5, verify=False)
            print(response5.text)
            print(session.cookies)
            if response5.text == "success":
                data6 = {
                    'vatLocation': 'Dubai',
                    'candidateId': '272077801',
                }
                data7 = {
                    'candidateID': '272077801',
                }

                response6 = session.post(url=LabSchedule_url, headers=headers_9, data=data6, verify=False)
                print(response6.text)
                response7 = session.post(url=LabSchedule_url, headers=headers_9, data=data7, verify=False)
                print(response7.text)
                response9 = session.post(url=LabSchedule_url, headers=headers_99, data=data9, verify=False)  # 最终确认位置!这一步失败,搞不定
                if response9.status_code == 200:

                    print(str(cand_id) + "抢到" + str(booklabDate_over) + lablocation + "的位置!")
                else:
                    print(response9.text)
            else:
                print(response5.text)
        except Exception as e:
            print(e)


def getPureDomainCookies(cookies):  # 将cookie的域名分组,用健值多的
    domain2cookie = {}  # 做一个域到cookie的映射
    for cookie in cookies:
        domain = cookie['domain']
        if domain in domain2cookie:
            domain2cookie[domain].append(cookie)
        else:
            domain2cookie[domain] = []
    maxCnt = 0
    ansDomain = ''
    for domain in domain2cookie.keys():
        cnt = len(domain2cookie[domain])
        if cnt > maxCnt:
            maxCnt = cnt
            ansDomain = domain
    ansCookies = domain2cookie[ansDomain]
    return ansCookies


if __name__ == '__main__':
    # # selenium被检测的反爬设置
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    options.add_argument("--remote-debugging-port=9222")
    driver = webdriver.Chrome(options=options)
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => Chrome
        })
      """
    })
    # CcieCookies('帐号', '密码', driver).main()
    result = CcieCookies('帐号', '密码', driver).main()
    # print(result)

    """
    ##方法一,失败
    # driver.maximize_window()
    # driver.get('https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline')
    # time.sleep(5)

    # with open("cookies.json", "r", encoding="utf-8") as ck:  # 从json文件中获取之前保存的cookie
    #     cook = json.load(ck)
    # cook_1 = getPureDomainCookies(cookies_list)
    # print(cook_1)
    # for cookie in cook_1:
    #     driver.add_cookie(cookie)  # 加载Cookies
    # driver.get('https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline')  # Reload一次,显示登录成功
    """

    """
    # # 方法二 手动将上面的result拿来测试
    # result = {'status': 1, 'content': [{'domain': 'ccie.cloudapps.cisco.com', 'httpOnly': True, 'name': 'JSESSIONID', 'path': '/', 'secure': True, 'value': '93515DD3E2E8C6E7AF1D073184805662'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 'cdc_ut', 'path': '/', 'secure': False,
    #                                     'value': 'prevacct:cisco-preview$accesslevel:guest$ts:1669380587850$customEvents:'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 's_ria', 'path': '/', 'secure': False, 'value': 'flash%20not%20detected%7C'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 'authorization', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'LoggedIn'},
    #                                    {'domain': '.cisco.com', 'expiry': 1669382387, 'httpOnly': False, 'name': 's_dfa', 'path': '/', 'secure': False, 'value': 'cisco-us'},
    #                                    {'domain': 'ccie.cloudapps.cisco.com', 'httpOnly': True, 'name': 'CSPROD.CAEAXprod', 'path': '/', 'sameSite': 'None', 'secure': True,
    #                                     'value': 'eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2Iiwia2lkIjoiYjBHYUtUUTE3WFZHbEt1TS1KSmMzQjVDUW5JIiwicGkuc3JpIjoiSmY1UGNIc24welBlNHJDa29OakhBb0YyUDJJLi5nTG1LIn0..uRa4_ddtKa8nhZKOh6kx8w.ui7Cxd1aURNWDf85DJ3zOgN4afddxihSJsUDnFYfB1PgMkXC6ZSO_jDTKkWCcHrecx_totRQtfGidzYd4ed74KLg0Kk5jV5p-6_WOdbzIuntZm8mX0HHNCHTw5I1HBpjykmDL61WJ3o7jAjPGjb6BXsaK8TQyAeqNvL4stouPQT7b0ted2EhYS2WJDnau8kMqvjB1nW6Ke-roRkc4Jrr1WWTWrl3Xhrsu3FrIyx1MaebLTeZo0uHwxIFr9ERO9kjPJRbDbhMGmzGU6-tc-eY2NA4bUTHYvJBsBNmtQo4JrGL4-8EAcfaGjP5IRWtZ2T2ex7ViTJcJtEWADDi_54q6XhvNmhd0lqfhf94oLjzOdQ.hPawnDBkWHWK6rjFGbLhSg'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 's_cc', 'path': '/', 'secure': False, 'value': 'true'},
    #                                    {'domain': '.cisco.com', 'expiry': 1700916575, 'httpOnly': False, 'name': '_abck', 'path': '/', 'secure': True,
    #                                     'value': '9F4D259F7371E5A6BD789FF741327AF7~-1~YAAQF5JkXxnFpoaEAQAABxLWrggFqXv4ToKGwcXgSBSLtgSn78JeiSf4eFQmzbW6WZbjScq6YpGrbxCR13KU8CgBetQeyvMU6sf3aSmQnzMLub7EgQ0Xq6u4WKvOkAeBhLdTNeNWO9aaoDqmJTVmB2U2J5PVhT6CKvy7+vE2ipJuViUJLef18UGZi75s/tVCkrc/EBPuISk+vXFngKyrUlSnzBGlmJOqEKjxK+e+9gbt/HTna/ZhuUfTs9FJfsKgKQPY+R5KAaZXyAvXrzIkdRiraTHRq383Y/wNUaR4wn7iIyXW8yqzJnmhNEu5fEDipiLcb02Lt3nBxauaya64QaAvm1m/Y90jSdI+vtrCZPYQFUYDIdmzxyW3HEMJY1LV2QTajxb8q/74~-1~-1~-1'},
    #                                    {'domain': '.cisco.com', 'expiry': 1703940582, 'httpOnly': False, 'name': 'CP_GUTC', 'path': '/', 'secure': True, 'value': '2.22.240.143.1955716693805837'},
    #                                    {'domain': 'ccie.cloudapps.cisco.com', 'httpOnly': True, 'name': 'a4e3b748021f355449c7d8e36c22a0cb', 'path': '/', 'sameSite': 'None', 'secure': True,
    #                                     'value': '899544fc21b0f44dd33a10cf638490c6'},
    #                                    {'domain': '.cisco.com', 'expiry': 1700916577, 'httpOnly': False, 'name': 'utag_main', 'path': '/', 'secure': False,
    #                                     'value': 'v_id:0184aed509510033e0e8c655d6c20506f001b067009dc$_sn:1$_ss:0$_st:1669382377958$ses_id:1669380507986%3Bexp-session$_pn:1%3Bexp-session$ctm_ss:true%3Bexp-session'},
    #                                    {'domain': '.cisco.com', 'httpOnly': True, 'name': 'wamsessiontracker', 'path': '/', 'sameSite': 'None', 'secure': True,
    #                                     'value': 'T1RLAQLGxcCRQgBDye7Z189q73Ftnm0MQBC1Wqvl46386mn2JDNkUio4AACAOOdc1dLfeXzgTRN_Fji8m3BwTbTzkDrMfDMp9xMaxFU4ytWfpy93xKqq_bA63PyhghwjHPU_ROn-nFW12QvUeNHdFcJkwcTE-fM89DEP33vQ6f1dwMNuwiLQdB6IKyKHZLTZJMSfH2jUM--9Gets8T6Bk-MmxnRFyNeu6ktG4yQ*'},
    #                                    {'domain': '.cisco.com', 'expiry': 1669387700, 'httpOnly': False, 'name': 'bm_mi', 'path': '/', 'secure': True,
    #                                     'value': '78AD99C112E9408972FA72D1AAB06A92~YAAQF5JkX5LEpoaEAQAAkgrWrhGhkcAEcgijE/wfQJwEbBe/o5cgFBvDplZqRYk/JdFTDCawIl5f8r4gvrR32StMy2ZOtduPN/mDjV4eiq1YGap3FfyuN53v4UXpiqd6+45TUJ+DAfZD4fUBcBiIyAXyxS4wwYf4tg4Cx868Jnq1AtB58omtPF+rnfvCV72vRQeuaLoSQmeRPQP6rd4DmFJy4Pf0XaQAKSefhX1onnnGYdkPjsUQ2r/XPO1JmOf+o/ghelWVsFB/43/+D8HrNd/10uQryCbhVCasKg8l65bPeOd8I/7cxvkLV2K4Q/MJvTLsY8UVvZeA0unm9xpEIPJ6dYlPu557jIW77A==~1'},
    #                                    {'domain': '.cisco.com', 'expiry': 1700916571, 'httpOnly': False, 'name': 'UnicaNIODID', 'path': '/', 'secure': False, 'value': 'undefined'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 'oneid_locale', 'path': '/', 'secure': False, 'value': 'zh-CN'},
    #                                    {'domain': '.cisco.com', 'expiry': 1700916571, 'httpOnly': False, 'name': 'OptanonConsent', 'path': '/', 'sameSite': 'Lax', 'secure': False,
    #                                     'value': 'isGpcEnabled=0&datestamp=Fri+Nov+25+2022+20%3A49%3A31+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=6.39.0&isIABGlobal=false&hosts=&consentId=fb03defa-0d0f-4743-8c0c-6d49ff916ff3&interactionCount=1&landingPath=NotLandingPage&groups=1%3A1%2C2%3A1%2C4%3A1%2C3%3A1'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 's_ppv', 'path': '/', 'secure': False, 'value': '62'},
    #                                    {'domain': 'ccie.cloudapps.cisco.com', 'expiry': 1703940587, 'httpOnly': False, 'name': 'cdc.cookie.newUser', 'path': '/', 'secure': False,
    #                                     'value': '1669985387154'},
    #                                    {'domain': 'ccie.cloudapps.cisco.com', 'httpOnly': False, 'name': 'JSESSIONID', 'path': '/CCIE/Schedule_Lab/CCIEOnline', 'secure': True,
    #                                     'value': '2344CF82C9A33356AD1CB301F6CCD2C8'},
    #                                    {'domain': '.cisco.com', 'expiry': 1700916571, 'httpOnly': False, 'name': 'OptanonAlertBoxClosed', 'path': '/', 'sameSite': 'Lax', 'secure': False,
    #                                     'value': '2022-11-25T12:49:31.840Z'}, {'domain': '.cisco.com', 'expiry': 1669387705, 'httpOnly': False, 'name': 'bm_sv', 'path': '/', 'secure': True,
    #                                                                            'value': 'B1B0BA4B0627052758DD7D78449700C4~YAAQF5JkXxrFpoaEAQAABxLWrhEEZItory7mnd1smhGPBirIwBqI7kxRPY5Pu+q9yhEhv2gdBASTvDwuCqOAWea72GBDMM2e7shyajGW2jqJCEPOcnxHlkJKwUP8ZG53JXBBL0gfdYw41CuJsC24Pe5cnadIKzuy7Hxa+DBOgrAeqVQvsI+8sxXFfGvJ0nf1UiGbmTB8JBYMoke70pNi458m7Bq18PRJ+dOammjAn92ojKhWBMqApccbmiUhoGH/~1'},
    #                                    {'domain': '.cisco.com', 'httpOnly': False, 'name': 'anchorvalue', 'path': '/', 'secure': False, 'value': ''},
    #                                    {'domain': '.cisco.com', 'expiry': 1669394900, 'httpOnly': False, 'name': 'bm_sz', 'path': '/', 'secure': False,
    #                                     'value': 'F222618BF2BAB4F0FCF797BDAB928B3D~YAAQF5JkX0OzpoaEAQAARPbUrhF+WhncqCOJv2arPbEylCiLGaO6uSCvKr1D6Wwq9Qnxw8PUMNnRgt4/a4JH4fq2bVWcCV+AIFrLpWF7QXJl+9LBoWWqrCa9uJxpdArosl3NiXrsOizBRHOt8/JujhwJGylThGbWmDUWOwdMpq/Ezk4rAcLrS4TPYYPaqU+lsN29I5rHiiV+MYS8i1sVRMU3+hwut2xCN7317PV1sb7mdOhLu84IwXna2m6cx07s9QjBT27fuMTc6lTeCtzo4R3XsayWoYPFOe8BxSpJ8f1rqw==~4470325~4536374'},
    #                                    {'domain': '.cisco.com', 'expiry': 1669387700, 'httpOnly': True, 'name': 'ak_bmsc', 'path': '/', 'secure': False,
    #                                     'value': '3FAAFB2090A772727FA37858B3B49EAA~000000000000000000000000000000~YAAQF5JkX0KzpoaEAQAARPbUrhEuFiicKIJxKsVzif/u8qll4z6d3Bad7w6v5oRYO/dt374CAA/GUvQ4ntY5du7s9Zb+jHaY/zfMhakMTHvPpEo3PawA9hnVYXA1eGbiX7wfpuBi+DWG1/EQHbankJHfaTOM7yDv+2279g+rhDdIf0o+NyQxYXPnicXoBXIejPmS7g63QPP23KsjdgQwGDA/R+3BpmE1hX1jQQeD8tAT8/dchAH9khfpAeC/RxXd+8Y5npmqAsH64wkWrzEcXHuaVnYlikkJS2UQVsaUIlMT5D+VJVLQZPXexO/5gK2oNqZeyZnMDeSx+3TSUPJ/hnePBcJoEHNZ1JnwDVAl5UpTZhXBpLJx9SlyNcuNyJehkAodZ81lhK7Xqw=='}]}
    # cookies_list = result.get('content')
    try:
        # driver.set_page_load_timeout(3)  #手动利用超时的方法来使url不重定向,然而失败
        # disable_cmd = 'netsh interface set interface 以太网 disabled'  #debug后不清楚,这种方法不行。
        # os.system(disable_cmd)
        # driver.set_page_load_timeout(10)  #手动利用超时的方法来使url不重定向,然而失败
        driver.get('https://id.cisco.com/')
        driver.delete_all_cookies()
        for cookie in cookies_list:
            driver.add_cookie(cookie)
        print("开始刷新页面~~~~~~~~~~~~~~~")
        driver.get('https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline')
        # driver.refresh()
    except Exception as e:
        print(e)
        print("测试………………。")
    # enable_cmd = 'netsh interface set interface 以太网 enabled'
    # os.system(enable_cmd)  # 启用网卡
    """

    """ 
    #方法三 失败
    # driver.get('https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline')  # 加载网页
    # cookies = pickle.load(open("test.pkl", "rb"))
    # for cookie in cookies:
    #     driver.add_cookie(cookie)  # 加载Cookies
    # driver.get('https://ccie.cloudapps.cisco.com/CCIE/Schedule_Lab/CCIEOnline/CCIEOnline')  # Reload一次,显示登录成功
    """

    """
    用requests方法模拟
    """
    # test = CcieCookies('***@qq.com', '***', webdriver.Chrome())
    # dict_nb = {}
    # for cookie in cookies_list:
    #     dict_nb[cookie['name']] = cookie['value']
    # test.book_site(booklabDate, location, dict_nb)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值