【Web_UI自动化_Python3&Select_自考抢座位】四川省教育考试院,自考网自动选择课程+自动报名抢座位,自动化测试案例

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time, re
'''
课程列表:[
'02134 信息系统设计与分析 2020-08-01 09:00 信息管理与信息系统 35', 
'02133 信息政策与法规 2020-08-01 14:30 信息管理与信息系统 35', 
'02136 Windows及应用 2020-08-02 09:00 信息管理与信息系统 35', 
'02129 信息资源建设 2020-08-02 14:30 信息管理与信息系统 35']
地址列表:[
'请选择考区地市州', '成都市', '自贡市226', '攀枝花749', '泸州市278', '5德阳市61', '6绵阳市121',
 '广元市319', '遂宁市148', '内江市219', '乐山市137', '南充市215', '宜宾市337', '广安市446', 达州市374',
  '雅安市141', '阿坝州404', '甘孜州718', '凉山州605', '巴中市438', '20眉山市92', '21资阳市122', '其它']

'''
class Grab_seat():
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'
    def __init__(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(10)
        self.base_url = "https://zk.sceea.cn/"
    def isElementExitst(self, driver, element):
        flag = True
        try:
            driver.find_element_by_xpath(element)
            return flag
        except:
            flag = False
            return flag
    # 登录
    def login_lesson(self, time_sleep=8, commit_button=True):
        driver = self.driver
        driver.get("https://zk.sceea.cn/")
        driver.find_element_by_id("txtName").click()
        driver.find_element_by_id("txtName").send_keys("")
        driver.find_element_by_id("txtPwd").click()
        driver.find_element_by_id("txtPwd").send_keys("")
        driver.find_element_by_id("txtCode").click()
        # driver.find_element_by_id("txtCode").send_keys("")
        time.sleep(time_sleep)
        if commit_button == True:
            driver.find_element_by_id("btn_login").click()
    # 添加课程,由于有异常,改为手动添加
    def add_lesson(self):
        driver = self.driver
        # driver.find_element_by_xpath("//input[@name='radiozkz']").click()
        # driver.find_element_by_xpath('//*[@id="tableDXCourse"]//input[@cname="信息政策与法规"]').click()
        # driver.find_element_by_xpath('//*[@id="tableDXCourse"]//input[@cname="Windows及应用"]').click()
        # driver.find_element_by_xpath('//*[@id="tableDXCourse"]//input[@cname="信息资源建设"]').click()
        # driver.find_element_by_xpath('//*[@id="tableDXCourse"]//input[@cname="信息系统设计与分析"]').click()
        input("----添加课程----")
        driver.find_element_by_xpath(u"//input[@value='<<选择课程']").click()
    # 记录日志
    def write_txt(self, filename, user_info, mode="a+"):
        filepath = r"D:\Mytest\Python3\Python3\项目\demo\demo_file\\"
        # 写入新文件(如果没有文件后缀.txt,默认文本文件)
        with open(filepath + f'{filename}', mode=mode, encoding="utf8") as wfile:
            wfile.write(user_info)
            wfile.write("\n")
            wfile.seek(0, 0)
            new = wfile.read()
    # 原始模板
    def temple_seat(self):
        driver = self.driver
        # driver.find_element_by_xpath("(//input[@name='radiozkz'])[2]").click()
        driver.find_element_by_xpath("//input[@name='radiozkz']").click()
        driver.find_element_by_name("chkCourse").click()
        driver.find_element_by_xpath("(//input[@name='chkCourse'])[3]").click()
        driver.find_element_by_xpath("(//input[@name='chkCourse'])[5]").click()
        driver.find_element_by_xpath("(//input[@name='chkCourse'])[6]").click()
        driver.find_element_by_xpath(u"//input[@value='<<选择课程']").click()
        while True:
            # 课程去掉选中状态
            print(f"----{time.strftime('%Y%m%d_%H:%M:%S', time.localtime(time.time()))}----")
            # driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[1]/td[1]/input').click()
            # driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[2]/td[1]/input').click()
            # driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[3]/td[1]/input').click()
            # driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[4]/td[1]/input').click()
            # for lesson_i in range(1, 5, 1):
            #     # 单选课程
            #     driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[{lesson_i}]/td[1]/input').click()
            #     lesson_text = driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[{lesson_i}]').text
            #     print(f"\n{lesson_i}.当前课程{lesson_text}")
            #     # 开始检索
            self.write_txt(f"2020_kaoshi.txt", str(f"----{time.strftime('%Y%m%d_%H:%M:%S', time.localtime(time.time()))}----"))
            select_list = driver.find_elements_by_css_selector("select#dllDSZ option")
            # print(f"select_list:{len(select_list)}")
            # for i in range(1, len(select_list), 1):  # 全量
            for i in [1, 5, 20]:  # 成都
                time.sleep(1)
                driver.find_element_by_id("dllDSZ").click()
                Select(driver.find_element_by_id("dllDSZ")).select_by_index(i)
                if driver.find_element_by_id("btnSearchKQ").get_attribute("disabled") == r"disabled":
                    time.sleep(1)
                driver.find_element_by_id("btnSearchKQ").click()
                time.sleep(1)
                # Select(driver.find_element_by_id("dllDSZ")).select_by_visible_text(u"成都市")
                select_text = driver.find_elements_by_css_selector("select#dllDSZ option")[i].text
                select_list = driver.find_elements_by_css_selector("table#tablePlace tbody>tr")
                for j in select_list:
                    result_text = f"{i}地区:{select_text}, 描述:{j.text}"
                    if "对不起" not in result_text:
                        if "成都市" in result_text or "德阳市" in result_text or "资阳市" in result_text or "眉山市" in result_text:
                            self.write_txt(f"2020_kaoshi.txt", str(f"{i}地区:{select_text}, 描述:{j.text}, 抢票啦!!!!----"))
                            print(str(f"{i}地区:{select_text}, 描述:{j.text}, 抢票啦!!!!----"))
                            driver.find_element_by_css_selector("table#tablePlace tbody>tr:first-child>td>input").click()  # 确定+提交
                            driver.find_element_by_css_selector("input#btnReg").click()
                            time.sleep(2)
                            alert = driver.switch_to.alert
                            print(alert.text)
                            alert.accept()
                            input("----手动提交----")
                    elif "对不起" in result_text:
                        # pass
                        self.write_txt(f"2020_kaoshi.txt", str(f"{i}地区:{select_text}, 描述:{j.text}"))
                        print(str(f"{i}地区:{select_text}, 描述:{j.text}----"))
                    else:
                        print(f"{i}地区:{select_text}, 描述:{j.text}")
                        self.write_txt(f"2020_kaoshi.txt", str(f"{i}地区:{select_text}, 描述:{j.text}"))
            # driver.find_element_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr[{lesson_i}]/td[1]/input').click()
            # addr_list = driver.find_elements_by_css_selector("table#tablePlace tbody>tr")
            # addr_text, count = "对不起,没有查询到符合条件的考位信息", 0
            # try:
            # driver.maximize_window()
            # while "对不起" in addr_text:
            #     time.sleep(5)
            #     count += 1
            #     print(f"{count}----等待5秒----{addr_text}")
            #     if driver.find_element_by_id("btnSearchKQ").get_attribute("disabled") == r"disabled":
            #         time.sleep(1)
            #     driver.find_element_by_id("btnSearchKQ").click()
            #     time.sleep(1)
            #     addr_text = driver.find_element_by_css_selector("table#tablePlace tbody>tr").text
    # 抓取课程
    def get_lesson(self):
        lesson_list, lesson_name_list = self.driver.find_elements_by_xpath(f'//*[@id="tableYXCourse"]/tbody/tr'), []
        for i in lesson_list:
            lesson_name_list.append(i.text)
            # print(i.text)
        print(f"课程列表:{lesson_name_list}")
        self.lesson_name_list = lesson_name_list
        return self.lesson_name_list
    # 抓取区域
    def get_addr(self):
        select_list, select_addr_list = self.driver.find_elements_by_css_selector("select#dllDSZ option"), []
        for i in select_list:  # 全量
            select_text = i.text
            select_addr_list.append(select_text)
        print(f"地址列表:{select_addr_list}")
        self.select_addr_list = select_addr_list
        return self.select_addr_list
    # 报名和提交
    def test_all_seat(self):
        driver = self.driver
        count = 0
        while True:
            print(f"\n----分录:{len(self.lesson_name_list)},区域:{len(self.select_addr_list)},时间:{time.strftime('%Y%m%d_%H:%M:%S', time.localtime(time.time()))}----")
            self.write_txt(f"2020_kaoshi.txt", str(f"----{time.strftime('%Y%m%d_%H:%M:%S', time.localtime(time.time()))}----"))
            try:
                select_list = driver.find_elements_by_css_selector("select#dllDSZ option")
                # print(f"select_list:{len(select_list)}")
                # for i in range(1, len(select_list), 1):  # 全部查询
                # for i in [1, 5, 20, 6, 21]:  # 部分查询 '5德阳市61', '20眉山市92', '6绵阳市121', '21资阳市122'
                # for i in [1, 5, 20]:  # 部分查询 '5德阳市61', '20眉山市92'
                for i in [1, 5]:  # 成都1
                    time.sleep(1)
                    driver.find_element_by_id("dllDSZ").click()
                    Select(driver.find_element_by_id("dllDSZ")).select_by_index(i)  # 选择区域index
                    while driver.find_element_by_id("btnSearchKQ").get_attribute("disabled") == r"disabled":  # 等待按钮恢复
                        time.sleep(1)
                    driver.find_element_by_id("btnSearchKQ").click()  # 点击查询按钮
                    time.sleep(2)
                    select_text = driver.find_elements_by_css_selector("select#dllDSZ option")[i].text  # 当前地址
                    select_list = driver.find_elements_by_css_selector("table#tablePlace tbody>tr")     # 全部地址列表
                    for j in select_list:
                        result_text = f"{i}地区:{select_text}, 描述:{j.text}"
                        if "对不起" not in result_text:
                            # if "成都市" in result_text or "德阳市" in result_text or "资阳市" in result_text or "眉山市" in result_text:
                            if "成都市" in result_text or "德阳市" in result_text:
                                self.write_txt(f"2020_kaoshi.txt", str(f"{i}地区:{select_text}, 描述:{j.text}, 抢票啦!!!!!!!!!!!!!!!!----{time.strftime('%Y%m%d_%H:%M:%S', time.localtime(time.time()))}"))
                                print(str(f"{i}地区:{select_text}, 描述:{j.text}, 抢票啦!!!!----"))
                                driver.find_element_by_css_selector("table#tablePlace tbody>tr:first-child>td>input").click()  # 确定+提交
                                driver.find_element_by_css_selector("input#btnReg").click()
                                time.sleep(1)
                                alert = driver.switch_to.alert
                                alert.accept()
                                print(f"首次提交:{alert.text}")
                                while driver.switch_to.alert:
                                    alert_again = driver.switch_to.alert
                                    print(f"二次提交:{alert_again.text}")
                                    alert_again.accept()
                                input("----test_all_seat,请确认结果----")
                        elif "对不起" in result_text:
                            self.write_txt(f"2020_kaoshi.txt", str(f"{i}地区:{select_text}, 描述:{j.text}----"))
                            print(str(f"{i}地区:{select_text}, 描述:{j.text}----"))
                            # pass
                        else:
                            print(f"{i}地区:{select_text}, 描述:{j.text}")
                            self.write_txt(f"2020_kaoshi.txt", str(f"{i}地区:{select_text}, 描述:{j.text}"))
            except Exception as e:
                print(e)
                input(".....异常提交......")

if __name__ == "__main__":
   test = Grab_seat()
   test.login_lesson()
   test.add_lesson()
   test.get_lesson()
   test.get_addr()
   test.test_all_seat()
 

猜你喜欢

转载自blog.csdn.net/denzeleo/article/details/106858692