美文网首页
形考成绩录入

形考成绩录入

作者: Noza_ea8f | 来源:发表于2020-01-06 15:25 被阅读0次

    提取试卷号为列表

    import pandas as pd
    import os
    
    path = 'temp/形考成绩-.xlsx'
    df = pd.read_excel(io=path, sheet_name='去重', dtype=str)
    df = df[['试卷号']].astype(str)
    paper_id_ls = df['试卷号'].unique()
    paper_id_ls=sorted(paper_id_ls)
    print(paper_id_ls)
    txt = str(paper_id_ls)
    # 删除已有文件
    my_file = 'temp/paper_id.py'  # 文件路径
    if os.path.exists(my_file):
        os.remove(my_file)
    
    with open('temp/paper_id.py', 'a+') as f:
        f.write('paper_id = ' + txt)
    

    形考成绩录入(补漏)

    from selenium import webdriver
    
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    import selenium.webdriver.support.expected_conditions as EC
    import selenium.webdriver.support.ui as ui
    import time, random
    
    from 形考成绩录入.temp.paper_id import paper_id_ls
    from 形考成绩录入.lib import user_info
    
    
    # 等待提示
    
    
    def wait_key():
        while True:
            message = input('请输入“空格键”继续:')
            if message == ' ':
                break
            print('你输入的是 ' + message + '!')
    
    
    # 一直等待某元素可见,默认超时10秒
    def is_visible(locator, timeout=10):
        try:
            ui.WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, locator)))
            return True
        except TimeoutException:
            return False
    
    
    # 判断是否有弹出框
    def alert_is_present(browser):
        try:
            alert = browser.switch_to.alert
            print(alert.text)
            return alert
        except:
            return False
    
    
    browser = webdriver.Chrome()
    url = 'http://121.28.25.166/StationWeb/pages/common/frameset.jsp'
    browser.get(url)
    # 登录
    browser.find_element_by_name('j_username_temp').send_keys(user_info.username)
    browser.find_element_by_name('j_password').send_keys(user_info.pswd)
    browser.find_element_by_name('txtschool').send_keys(user_info.school_code)
    browser.find_element_by_name('veryCode').click()
    wait_key()
    
    for paper_id in paper_id_ls:
        handles = browser.window_handles  # 获得所有窗口句柄
        browser.switch_to.window(handles[-1])  # 取最新的
        browser.switch_to.parent_frame()  # 返回父框架
        browser.switch_to.frame('main')  # 定位到main框架
        browser.switch_to.frame('Info')  # Info
        # todo 输入试卷号
        time.sleep(3)
        browser.find_element_by_name('paperId').clear()
        browser.find_element_by_name('paperId').send_keys(paper_id)
        browser.find_element_by_name('method').click()
        time.sleep(5)
    
        # 如果有弹出框 点击确定
        if alert_is_present(browser):
            browser.switch_to.alert.accept()
            print(paper_id + ' 录入失败,相应的计划开考科目没有形考项目或没报考记录!')
            time.sleep(2)
            with open('log.txt', 'a+') as f:
                f.write(paper_id + ' 录入失败,相应的计划开考科目没有形考项目或没报考记录!' + '\n')
        else:
            try:
                # 点击查询
                browser.find_element_by_css_selector(
                    'table.DataInputTable:nth-child(4) > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(10) > a:nth-child(1)').click()
                time.sleep(2)
                handles = browser.window_handles  # 获得所有窗口句柄
                browser.switch_to.window(handles[-1])  # 取最新的
                time.sleep(3)
                # 点击查找进入下一页
                browser.find_element_by_xpath('/html/body/form/p/input').click()
                time.sleep(3)
                # 获取该试卷号下所有学生信息
                strsInfo = browser.find_element_by_xpath('/html/body/applet/param[2]').get_attribute('value')
                info_students_num = strsInfo.split(';')[0].split(',')
                # 获取该试卷号下所有学生成绩
                strsForm = browser.find_element_by_xpath('/html/body/applet/param[3]').get_attribute('value')
                info_scores = strsForm.split(';')
    
                # 查询成绩
                for k in range(len(info_scores)):
                    print(k)
                    if info_scores[k] == '':  # 如果该学生成绩为空
                        print(info_students_num[k])
                        # try:
                        # 查询成绩索引值
                        # student_id = student_nums.index(info_students_num[k])
                        # 通过索引获取成绩
                        # new_score = student_scores[student_id]
                        new_score = random.randint(92, 96)
                        # 修改成绩
                        js = 'document.querySelector("table.DataInputTable:nth-child(9) > tbody:nth-child(1) > tr:nth-child(5) > td:nth-child({}) > input:nth-child(2)").value="{}";'.format(
                            str(k * 4 + 1), new_score)
                        browser.execute_script(js)
                        # print(f'当前学生成绩{new_score}')
                        # with open('log.txt', 'a+') as f:
                        #     f.write(paper_id + ' ' + student_nums[k] + ' 录入成功!' + '\n')
                    elif int(info_scores[k]) < 80:  # 如果该学生成绩小于80
                        # 给成绩赋值
                        new_score = 93
                        # 修改成绩
                        js = 'document.querySelector("table.DataInputTable:nth-child(9) > tbody:nth-child(1) > tr:nth-child(5) > td:nth-child({}) > input:nth-child(2)").value="{}";'.format(
                            str(k * 4 + 1), new_score)
                        # print(f'当前学生成绩{new_score}')
                        browser.execute_script(js)
                # 点击保存
                browser.find_element_by_xpath('/html/body/form/p[1]/input').click()
                time.sleep(3)
                alert = browser.switch_to.alert
                alert.accept()
                time.sleep(2)
                print(paper_id + ' 录入完毕!')
                with open('log.txt', 'a+') as f:
                    f.write(paper_id + ' 录入完毕!' + '\n')
                browser.close()
                time.sleep(3)
            except Exception as e:
                print(e)
                print(paper_id + ' 录入失败,省校不准!')
                time.sleep(2)
                browser.close()
                with open('log.txt', 'a+') as f:
                    f.write(paper_id + ' 录入失败,省校不准!' + '\n')
                time.sleep(2)
                continue
    
    

    形考成绩录入统计(数据提取)

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.common.by import By
    import selenium.webdriver.support.expected_conditions as EC
    import selenium.webdriver.support.ui as ui
    import time
    
    from 形考成绩录入.lib import user_info
    
    import pandas as pd
    
    
    # 等待提示
    
    
    def wait_key():
        while True:
            message = input('请输入“空格键”继续:')
            if message == ' ':
                break
            print('你输入的是 ' + message + '!')
    
    
    # 一直等待某元素可见,默认超时10秒
    def is_visible(locator, timeout=10):
        try:
            ui.WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, locator)))
            return True
        except TimeoutException:
            return False
    
    
    # 判断是否有弹出框
    def alert_is_present(browser):
        try:
            alert = browser.switch_to.alert
            print(alert.text)
            return alert
        except:
            return False
    
    
    browser = webdriver.Chrome()
    url = 'http://121.28.25.166/StationWeb/pages/common/frameset.jsp'
    browser.get(url)
    # 登录
    browser.find_element_by_name('j_username_temp').send_keys(user_info.username)
    browser.find_element_by_name('j_password').send_keys(user_info.pswd)
    browser.find_element_by_name('txtschool').send_keys(user_info.school_code)
    browser.find_element_by_name('veryCode').click()
    wait_key()
    
    browser.switch_to.parent_frame()  # 返回父框架
    browser.switch_to.frame('main')  # 定位到main框架
    browser.switch_to.frame('Info')  # Info
    # todo 输入试卷号
    time.sleep(5)
    
    # 获取表头
    table_title = ['序号']
    for row in range(2, 9):
        txt = browser.find_element_by_xpath(f'/html/body/form/table[1]/tbody/tr[2]/td[{row}]/a/b').text
        table_title.append(txt)
    for row in range(9, 12):
        txt = browser.find_element_by_xpath(f'/html/body/form/table[1]/tbody/tr[2]/td[{row}]/b').text
        table_title.append(txt)
    datas_ls = []
    try:
        for page_num in range(20):
            for row in range(3, 23):
                row_ls = []
                for col in range(1, 12):
                    txt = browser.find_element_by_xpath(f'/html/body/form/table[1]/tbody/tr[{row}]/td[{col}]').text
                    row_ls.append(txt)
                datas_ls.append(row_ls)
            time.sleep(2)
            page_num_ = browser.find_element_by_xpath('/html/body/form/table[2]/tbody/tr/td[2]').text
            print(f'第{page_num_}页数据获取完毕!')
            # browser.find_element_by_xpath('/html/body/form/table[2]/tbody/tr/td[4]/input').clear()
            # browser.find_element_by_xpath('/html/body/form/table[2]/tbody/tr/td[4]/input').send_keys(page_num+2)
            if page_num == 0:
                browser.find_element_by_xpath('/html/body/form/table[2]/tbody/tr/td[3]/input').click()
                '/html/body/form/table[2]/tbody/tr/td[4]/input'
            else:
                browser.find_element_by_xpath('/html/body/form/table[2]/tbody/tr/td[4]/input').click()
            time.sleep(30)
    finally:
        df = pd.DataFrame(datas_ls, columns=table_title)
        writer = pd.ExcelWriter('rezult.xlsx')
        df.to_excel(writer, 'rezult', index=False)
        print('ok')
        writer.save()
    

    相关文章

      网友评论

          本文标题:形考成绩录入

          本文链接:https://www.haomeiwen.com/subject/wmkooctx.html