Example #1
0
def user_flag(dd_status, uname):
    """
    用户登录状态
    :param dd_status:
    :type dd_status:
    :param uname:
    :type uname:
    :return:
    :rtype:
    """
    if dd_status:
        # cookies = dingding.dd_login_status(uname, has_dd=True)
        pass
    else:
        # if (input("是否保存钉钉帐户密码,保存后可后免登陆学习(Y/N) ")) not in ["y", "Y"]:
        if True:
            driver_login = mydriver.Mydriver(nohead=False)
            # 删除登录二维码
            # path = '../login.png'
            # if delete_folder.delete_file(path):
            cookies = driver_login.login()
            # else:
            #     print("删除二维码出错")
        else:
            # cookies = dingding.dd_login_status(uname)
            pass
    a_log = user.get_a_log(uname)
    v_log = user.get_v_log(uname)

    return cookies, a_log, v_log
def article(cookies, a_log, each):
    if each[0] < 6 or each[3] < 8:
        driver_article = mydriver.Mydriver(nohead=nohead)
        driver_article.get_url("https://www.xuexi.cn/notFound.html")
        driver_article.set_cookies(cookies)
        links = get_links.get_article_links()
        try_count = 0
        while True:
            if each[0] < 6 and try_count < 10:
                a_num = 6 - each[0]
                for i in range(a_log, a_log + a_num):
                    driver_article.get_url(links[i])
                    time.sleep(random.randint(5, 15))
                    for j in range(120):
                        if random.random() > 0.5:
                            driver_article.go_js('window.scrollTo(0, document.body.scrollHeight/120*{})'.format(j))
                        print("\r文章学习中,文章剩余{}篇,本篇剩余时间{}秒".format(a_log + a_num - i, 120 - j), end="")
                        time.sleep(1)
                    driver_article.go_js('window.scrollTo(0, document.body.scrollHeight)')
                    total, each = show_score(cookies)
                    if each[0] >= 6:
                        print("检测到文章数量分数已满,退出学习")
                        break
                a_log += a_num
            else:
                with open("./user/{}/a_log".format(uname), "w", encoding="utf8") as fp:
                    fp.write(str(a_log))
                break
        try_count = 0
        while True:
            if each[3] < 6 and try_count < 10:
                num_time = 60
                driver_article.get_url(links[a_log-1])
                time.sleep(random.randint(5, 15))
                remaining = (6 - each[3]) * 4 * num_time
                for i in range(remaining):
                    if random.random() > 0.5:
                        driver_article.go_js(
                            'window.scrollTo(0, document.body.scrollHeight/{}*{})'.format(remaining, i))
                    print("\r文章时长学习中,文章总时长剩余{}秒".format(remaining - i), end="")
                    time.sleep(1)
                    if i % (120) == 0 and i != remaining:
                        total, each = show_score(cookies)
                        if each[3] >= 6:
                            print("检测到文章时长分数已满,退出学习")
                            break
                driver_article.go_js('window.scrollTo(0, document.body.scrollHeight)')
                total, each = show_score(cookies)
            else:
                break
        if try_count < 10:
            print("文章学习完成")
        else:
            print("文章学习出现异常,请检查用户名下a_log文件记录数")
        driver_article.quit()
    else:
        print("文章之前学完了")
def video(cookies, v_log, each):
    if each[1] < 6 or each[4] < 10:
        driver_video = mydriver.Mydriver(nohead=nohead)
        driver_video.get_url("https://www.xuexi.cn/notFound.html")
        driver_video.set_cookies(cookies)
        links = get_links.get_video_links()
        try_count = 0
        while True:
            if each[1] < 6 and try_count < 10:
                v_num = 6 - each[1]
                for i in range(v_log, v_log + v_num):
                    driver_video.get_url(links[i])
                    time.sleep(random.randint(5, 15))
                    for j in range(180):
                        if random.random() > 0.5:
                            driver_video.go_js('window.scrollTo(0, document.body.scrollHeight/180*{})'.format(j))
                        print("\r视频学习中,视频剩余{}个,本次剩余时间{}秒".format(v_log + v_num - i, 180 - j), end="")
                        time.sleep(1)
                    driver_video.go_js('window.scrollTo(0, document.body.scrollHeight)')
                    total, each = show_score(cookies)
                    if each[1] >= 6:
                        print("检测到视频数量分数已满,退出学习")
                        break
                v_log += v_num
            else:
                with open("./user/{}/v_log".format(uname), "w", encoding="utf8") as fp:
                    fp.write(str(v_log))
                break
        try_count = 0
        while True:
            if each[4] < 6 and try_count < 10:
                num_time = 60
                driver_video.get_url(links[v_log-1])
                time.sleep(random.randint(5, 15))
                remaining = (6 - each[4]) * 3 * num_time
                for i in range(remaining):
                    if random.random() > 0.5:
                        driver_video.go_js(
                            'window.scrollTo(0, document.body.scrollHeight/{}*{})'.format(remaining, i))
                    print("\r视频学习中,视频总时长剩余{}秒".format(remaining - i), end="")
                    time.sleep(1)
                    if i % (180) == 0 and i != remaining:
                        total, each = show_score(cookies)
                        if each[4] >= 6:
                            print("检测到视频时长分数已满,退出学习")
                            break
                driver_video.go_js('window.scrollTo(0, document.body.scrollHeight)')
                total, each = show_score(cookies)
            else:
                break
        if try_count < 10:
            print("视频学习完成")
        else:
            print("视频学习出现异常,请检查用户名下v_log文件记录数")
        driver_video.quit()
    else:
        print("视频之前学完了")
def user_flag(dd_status, uname):
    if dd_status:
        cookies = dingding.dd_login_status(uname, has_dd=True)
    else:
        if (input("是否保存钉钉帐户密码,保存后可后免登陆学习(Y/N) ")) not in ["y", "Y"]:
            driver_login = mydriver.Mydriver(nohead=False)
            cookies = driver_login.login()
        else:
            cookies = dingding.dd_login_status(uname)
    a_log = user.get_a_log(uname)
    v_log = user.get_v_log(uname)

    return cookies, a_log, v_log
Example #5
0
def dd_login_status(uname, has_dd=False):
    while True:
        if has_dd:
            dname, pwd = load_dingding("./user/{}/dingding".format(uname))
            print("读取用户信息成功")
        else:
            dname, pwd = get_dd()
        driver_login = mydriver.Mydriver(noimg=False)
        login_status = driver_login.dd_login(dname, pwd)
        if login_status:
            save_dingding("./user/{}/dingding".format(uname), dname, pwd)
            cookies = driver_login.get_cookies()
            break
    return cookies
def user_flag(dd_status, uname):
    driver_login = mydriver.Mydriver(nohead=False)
    cookies = driver_login.login()

    print(cookies)

    itchat.auto_login(hotReload=True)
    # 这里修改要发送的用户名
    wechat_users = itchat.search_friends(name=u'张三')
    # itchat.send("这是一条系统自动发送的消息,请扫描二维码登录学习强国", toUserName=wechat_users[0]["UserName"]);

    a_log = user.get_a_log(uname)
    v_log = user.get_v_log(uname)

    return cookies, a_log, v_log, wechat_users
Example #7
0
def dd_login_status(uname, has_dd=False):
    while True:
        if has_dd:
            dname, pwd = load_dingding("./user/{}/dingding".format(uname))
            print("读取用户信息成功")
        else:
            dname, pwd = get_dd()
        driver_login = mydriver.Mydriver(noimg=False,
                                         nohead=False)  #添加nohead=True
        login_status = driver_login.dd_login(dname, pwd)
        time.sleep(15)
        if login_status:
            save_dingding("./user/{}/dingding".format(uname), dname, pwd)
            cookies = driver_login.get_cookies()
            # driver_login.quit()
            break
    return driver_login, cookies
Example #8
0
def dd_login_status(username, has_dd=False):
    """
    判断当前用户是否存在,不存在就保存一条新的记录
    :param username: 标识记录名
    :param has_dd: 是否有钉钉账号
    :return:
    """
    while True:
        if has_dd:
            dd_name, pwd = load_dingding("./user/{}/dingding".format(username))
            print("读取用户信息成功")
        else:
            dd_name, pwd = get_dd()
        driver_login = mydriver.Mydriver(no_img=False)
        login_status = driver_login.dd_login(dd_name, pwd)
        if login_status:
            save_dingding("./user/{}/dingding".format(username), dd_name, pwd)
            cookies = driver_login.get_cookies()
            break
    return cookies
Example #9
0
def zhuanxiang(cookies, d_log, each):
    if each[7] < 10:
        # driver_zhuanxiang = mydriver.Mydriver(nohead=nohead)  time.sleep(random.randint(5, 15))
        driver_zhuanxiang = mydriver.Mydriver(nohead=False)
        driver_zhuanxiang.driver.maximize_window()
        print('请保持窗口最大化')
        print('请保持窗口最大化')
        print('请保持窗口最大化')
        driver_zhuanxiang.get_url("https://www.xuexi.cn/notFound.html")
        driver_zhuanxiang.set_cookies(cookies)
        try_count = 0

        if each[7] < 10:
            d_num = 10 - each[5]
            letters = list("ABCDEFGHIJKLMN")
            driver_zhuanxiang.get_url(
                'https://pc.xuexi.cn/points/my-points.html')
            driver_zhuanxiang.click_xpath(
                '//*[@id="app"]/div/div[2]/div/div[3]/div[2]/div[7]/div[2]/div[2]/div'
            )
            time.sleep(2)
            for tem in range(0, 40):
                try:
                    temword = driver_zhuanxiang.driver.find_element_by_xpath(
                        '//*[@id="app"]/div/div[2]/div/div[4]/div/div/div/div['
                        + str(tem + 1) + ']/div[2]/button').text
                except:
                    temword = ''
                name_list = ["开始答题", "继续答题"]  # , "重新答题"
                if (any(name in temword for name in name_list)):
                    driver_zhuanxiang.click_xpath(
                        '//*[@id="app"]/div/div[2]/div/div[4]/div/div/div/div['
                        + str(tem + 1) + ']/div[2]/button')
                    break
            while each[7] < 10:
                try:
                    category = driver_zhuanxiang.xpath_getText(
                        '//*[@id="app"]/div/div[2]/div/div[6]/div[1]/div[1]'
                    )  # get_attribute("name")
                except Exception as e:
                    print('查找元素失败!')
                    break
                print(category)
                tips = driver_zhuanxiang._view_tips()
                check_delay()
                if not tips:
                    print("本题没有提示")
                    if "填空题" in category:
                        print('没有找到提示,暂时略过')
                        continue
                    elif "多选题" in category:
                        print('没有找到提示,暂时略过')
                        continue
                    elif "单选题" in category:
                        print('没有找到提示,暂时略过')
                        continue
                        # return driver_daily._search(driver_daily.content, driver_daily.options, driver_daily.excludes)
                    else:
                        print("题目类型非法")
                        break
                else:
                    if "填空题" in category:
                        answer = tips
                        driver_zhuanxiang.zhuanxiang_fill_in_blank(answer)

                    elif "多选题" in category:
                        options = driver_zhuanxiang.radio_get_options()
                        radio_in_tips, radio_out_tips = "", ""
                        for letter, option in zip(letters, options):
                            for tip in tips:
                                if tip in option:
                                    # print(f'{option} in tips')
                                    if letter not in radio_in_tips:
                                        radio_in_tips += letter
                        radio_out_tips = [
                            letter for letter, option in zip(letters, options)
                            if (letter not in radio_in_tips)
                        ]

                        print('含 ', radio_in_tips, '不含', radio_out_tips)
                        if len(
                                radio_in_tips
                        ) > 1:  # and radio_in_tips not in driver_zhuanxiang.excludes:
                            print('根据提示', radio_in_tips)
                            driver_zhuanxiang.radio_check(radio_in_tips)
                        elif len(radio_out_tips
                                 ) > 1:  # and radio_out_tips not in excludes
                            print('根据提示', radio_out_tips)
                            driver_zhuanxiang.radio_check(radio_out_tips)
                        # return driver_zhuanxiang._search(content, options, excludes)
                        else:
                            print('无法根据提示判断,准备搜索……')
                    elif "单选题" in category:
                        options = driver_zhuanxiang.radio_get_options()
                        if '因此本题选' in tips:
                            check = [x for x in letters if x in tips]
                            driver_zhuanxiang.radio_check(check)
                        else:
                            radio_in_tips, radio_out_tips = "", ""
                            '''
                            option_elements = driver_zhuanxiang.wait.until(driver_zhuanxiang.EC.presence_of_all_elements_located(
                                (driver_zhuanxiang.By.XPATH, '//*[@id="app"]/div/div[2]/div/div[4]/div[1]')))
                            # option_elements = self.find_elements(rules['challenge_options'])
                            options = [x.get_attribute("name") for x in option_elements]'''
                            for letter, option in zip(letters, options):
                                for tip in tips:
                                    if tip in option:
                                        # print(f'{option} in tips')
                                        if letter not in radio_in_tips:
                                            radio_in_tips += letter
                                    else:
                                        # print(f'{option} out tips')
                                        if letter not in radio_out_tips:
                                            radio_out_tips += letter

                            print('含 ', radio_in_tips, '不含', radio_out_tips)
                            if 1 == len(
                                    radio_in_tips
                            ):  # and radio_in_tips not in driver_zhuanxiang.excludes:
                                print('根据提示', radio_in_tips)
                                driver_zhuanxiang.radio_check(radio_in_tips)
                            elif 1 == len(
                                    radio_out_tips
                            ):  # and radio_out_tips not in excludes
                                print('根据提示', radio_out_tips)
                                driver_zhuanxiang.radio_check(radio_out_tips)
                            # return driver_zhuanxiang._search(content, options, excludes)
                            else:
                                print('无法根据提示判断,准备搜索……')
                    else:
                        print("题目类型非法")
                        break
                    # print("\r专项答题中,题目剩余{}题".format(d_log + d_num - i), end="")
                    time.sleep(1)
                d_log += d_num

            total, each = show_score(cookies)
            if each[6] >= 5:
                print("检测到专项答题分数已满,退出学习")
                driver_zhuanxiang.quit()
        else:
            with open("./user/{}/d_log".format(uname), "w",
                      encoding="utf8") as fp:
                fp.write(str(d_log))
            # break
        try:
            driver_zhuanxiang.quit()
        except Exception as e:
            print('……')
    else:
        print("专项答题之前学完了")
Example #10
0
    '''
    nohead, lock, stime = get_argv()
    # print(argv)
    # print(nohead,lock)
    # lock = False
    if lock:
        print('开始今天的文章学习')
        article(driver_login, a_log, myscores)
        print('开始今天的视频学习')
        video(driver_login, v_log, myscores)
        driver_login.quit()
        # user.shutdown(60)
    else:
        driver_login.quit()

        driver_article = mydriver.Mydriver(nohead=nohead)
        driver_article.get_url("https://pc.xuexi.cn/points/my-points.html")
        driver_article.set_cookies(cookies)

        article_thread = threads.MyThread("文章学习", article, driver_article, a_log, myscores, lock=lock)
        '''
        driver = driver_login.driver
        driver.execute_script("window.open('https://www.xuexi.cn/notFound.html')")
        all_handles = driver.window_handles
        print(all_handles)
        driver.switch_to_window(all_handles[1])
        '''

        driver_video = mydriver.Mydriver(nohead=nohead)
        driver_video.get_url("https://pc.xuexi.cn/points/my-points.html")
        driver_video.set_cookies(cookies)
Example #11
0
def daily(cookies, d_log, each):
    if each[5] < 6:
        # driver_daily = mydriver.Mydriver(nohead=nohead)  time.sleep(random.randint(5, 15))
        driver_daily = mydriver.Mydriver(nohead=False)
        driver_daily.driver.maximize_window()
        print('请保持窗口最大化')
        print('请保持窗口最大化')
        print('请保持窗口最大化')
        driver_daily.get_url("https://www.xuexi.cn/notFound.html")
        driver_daily.set_cookies(cookies)
        try_count = 0

        if each[5] < 6:
            d_num = 6 - each[5]
            letters = list("ABCDEFGHIJKLMN")
            driver_daily.get_url('https://pc.xuexi.cn/points/my-points.html')
            driver_daily.click_xpath('//*[@id="app"]/div/div[2]/div/div[3]/div[2]/div[5]/div[2]/div[2]/div')
            while each[5] < 6:
                try:
                    category = driver_daily.xpath_getText(
                        '//*[@id="app"]/div/div[2]/div/div[4]/div[1]/div[1]')  # get_attribute("name")
                except Exception as e:
                    print('查找元素失败!')
                    break
                print(category)
                tips = driver_daily._view_tips()
                check_delay()
                if not tips:
                    print("本题没有提示")
                    if "填空题" in category:
                        print('没有找到提示,暂时略过')
                        continue
                    elif "多选题" in category:
                        print('没有找到提示,暂时略过')
                        continue
                    elif "单选题" in category:
                        print('没有找到提示,暂时略过')
                        continue
                        # return driver_daily._search(driver_daily.content, driver_daily.options, driver_daily.excludes)
                    else:
                        print("题目类型非法")
                        break
                else:
                    if "填空题" in category:
                        answer = tips
                        driver_daily.fill_in_blank(answer)

                    elif "多选题" in category:
                        options = driver_daily.radio_get_options()
                        radio_in_tips, radio_out_tips = "", ""
                        for letter, option in zip(letters, options):
                            for tip in tips:
                                if tip in option:
                                    # print(f'{option} in tips')
                                    if letter not in radio_in_tips:
                                        radio_in_tips += letter
                                else:
                                    # print(f'{option} out tips')
                                    if letter not in radio_out_tips:
                                        radio_out_tips += letter

                        print('含 ', radio_in_tips, '不含', radio_out_tips)
                        if len(radio_in_tips) > 1:  # and radio_in_tips not in driver_daily.excludes:
                            print('根据提示', radio_in_tips)
                            driver_daily.radio_check(radio_in_tips)
                        elif len(radio_out_tips) > 1:  # and radio_out_tips not in excludes
                            print('根据提示', radio_out_tips)
                            driver_daily.radio_check(radio_out_tips)
                        # return driver_daily._search(content, options, excludes)
                        else:
                            print('无法根据提示判断,准备搜索……')
                    elif "单选题" in category:
                        options = driver_daily.radio_get_options()
                        radio_in_tips, radio_out_tips = "", ""
                        '''
                        option_elements = driver_daily.wait.until(driver_daily.EC.presence_of_all_elements_located(
                            (driver_daily.By.XPATH, '//*[@id="app"]/div/div[2]/div/div[4]/div[1]')))
                        # option_elements = self.find_elements(rules['challenge_options'])
                        options = [x.get_attribute("name") for x in option_elements]'''
                        for letter, option in zip(letters, options):
                            for tip in tips:
                                if tip in option:
                                    # print(f'{option} in tips')
                                    if letter not in radio_in_tips:
                                        radio_in_tips += letter
                                else:
                                    # print(f'{option} out tips')
                                    if letter not in radio_out_tips:
                                        radio_out_tips += letter

                        print('含 ', radio_in_tips, '不含', radio_out_tips)
                        if 1 == len(radio_in_tips):  # and radio_in_tips not in driver_daily.excludes:
                            print('根据提示', radio_in_tips)
                            driver_daily.radio_check(radio_in_tips)
                        elif 1 == len(radio_out_tips):  # and radio_out_tips not in excludes
                            print('根据提示', radio_out_tips)
                            driver_daily.radio_check(radio_out_tips)
                        # return driver_daily._search(content, options, excludes)
                        else:
                            print('无法根据提示判断,准备搜索……')
                    else:
                        print("题目类型非法")
                        break
                    # print("\r每日答题中,题目剩余{}题".format(d_log + d_num - i), end="")
                    time.sleep(1)
                d_log += d_num

            total, each = show_score(cookies)
            if each[5] >= 6:
                print("检测到每日答题分数已满,退出学习")
                driver_daily.quit()
        else:
            with open("./user/{}/d_log".format(uname), "w", encoding="utf8") as fp:
                fp.write(str(d_log))
            # break
        try:
            driver_daily.quit()
        except Exception as e:
            print('……')
    else:
        print("每日答题之前学完了")