ITPub博客

首页 > IT职业 > IT生活 > 【老师见打系列】:我只是写了一个自动回复讨论的脚本~

【老师见打系列】:我只是写了一个自动回复讨论的脚本~

IT生活 作者:专注的阿熊 时间:2022-11-07 12:46:05 0 删除 编辑

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

import json

import time

class MOOC(object):

     def __init__(self):

         self.driver = webdriver.Chrome()

         self.driver.get('https://www.icourse163.org/')

     def login(self):

         # 获取保存下的 cookie 值

         with open('moocCookie.txt', 'r', encoding='utf-8') as f:

             listCookies = json.loads(f.read())

         # 往 driver 里添加 cookie

         for cookie in listCookies:

             cookie_dict = {

                 'domain': '.icourse163.org',

                 'name': cookie.get('name'),

                 'value': cookie.get('value'),

                 'expires': '',

                 'path': '/',

                 'httpOnly': False,

                 'HostOnly': False,

                 'Secure': False

             }

             self.driver.add_cookie(cookie_dict)

         self.driver.refresh() # 刷新页面

     # 进入课程

     def entering_the_course(self):

         # 等待“个人中心”元素出现

         WebDriverWait(self.driver, 1000).until(

             EC.presence_of_element_located((By.XPATH, '//*[@id="j-indexNav-bar"]/div/div/div/div/div[7]/div[3]/div/div/a/span'))

         )

         self.driver.find_element(By.XPATH, '//*[@id="j-indexNav-bar"]/div/div/div/div/div[7]/div[3]/div/div/a/span').click()

         # 等待“ SPOC 课程 12 ”元素出现并点击

         time.sleep(1)

         WebDriverWait(self.driver, 1000).until(

             EC.presence_of_element_located((By.XPATH, '//div[@class="u-selectTab-container"]/div[2]/a'))

         )

         self.driver.find_element(By.XPATH, '//div[@class="u-selectTab-container"]/div[2]/a').click()

         # 等待课程元素出现,并获取元素,用户选择课程

         WebDriverWait(self.driver, 1000).until(

             EC.presence_of_element_located((By.XPATH, '//div[@class="course-card-wrapper"]/div/a/div/img'))

         )

         course_ele = self.driver.find_elements(By.XPATH, '//div[@class="course-card-wrapper"]/div/a/div/img')

         course_name = [ele.get_attribute('alt') for ele in course_ele]

         for index, i in enumerate(course_name):

             print(index, i)

         user = int(input(' 请输入课程序号: '))

         course_ele[user].click()

         time.sleep(2)

         self.driver.switch_to.window(self.driver.window_handles[-1]) # 切换窗口

         time.sleep(2)

         # 等待课件出现并点击

         WebDriverWait(self.driver, 1000).until(

             EC.presence_of_element_located((By.XPATH, '//li[@data-name=" 课件 "]'))

         )

         self.driver.find_element(By.XPATH, '//li[@data-name=" 课件 "]').click()

         # 等待章节元素出现并点击

         WebDriverWait(self.driver, 1000).until(

             EC.presence_of_element_located((By.XPATH, '//div[@class="m-learnChapterList f-pr"]/div[@class="m-learnChapterNormal f-pr"][1]'))

         )

         # 点击章节

         self.driver.find_element(By.XPATH, '//div[@class="m-learnChapterList f-pr"]/div[@class="m-learnChapterNormal f-pr"][1]').click()

         time.sleep(0.3)

         # 点击进入视频

         self.driver.find_elements(By.XPATH, '//div[@class="sourceList"]/div[1]')[0].click()

         # 获取章节中”选择课程“的元素并点击

         WebDriverWait(self.driver, 1000).until(

             EC.presence_of_element_located(

                 (By.XPATH, '//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div'))

         )

         # 获取所有章节

         temp_chapters = self.driver.find_elements(By.XPATH, '//div[@class="f-fl j-chapter"]//div[@class="down f-bg j-list"]/div')

         # 通过循环获取到的章节元素和课程元素,进行讨论

         for chapter_index in range(len(temp_chapters)): # 循环章节

             # 获取章节中”选择课程“的元素并点击

             WebDriverWait(self.driver, 1000).until(

                 EC.presence_of_element_located(

                     (By.XPATH, '//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div'))

             )

             # 获取章节选项框并点击

             self.driver.find_element(By.XPATH, '//div[@class="f-fl j-chapter"]/div[@class="u-select"]/div[1]').click()

             self.driver.find_elements(By.XPATH, '//div[@class="f-fl j-chapter"]//div[@class="down f-bg j-list"]/div')[chapter_index].click()

             # 等待课程元素出现

             WebDriverWait(self.driver, 1000).until(

                 EC.presence_of_element_located(

                     (By.XPATH, '//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div'))

             )

             # 获取章节中所有课程

             course = self.driver.find_elements(By.XPATH,'//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div/div[2]/div')

             course_names = [i.get_attribute('title') for i in course]

             for c_index in range(len(course)): # 循环课程

                 WebDriverWait(self.driver, 1000).until(

                     EC.presence_of_element_located(

                         (By.XPATH, '//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div'))

                 )

                 self.driver.find_element(By.XPATH,'//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div').click()

                 WebDriverWait(self.driver, 1000).until(

                     EC.presence_of_element_located(

                         (By.XPATH, '//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div/div[2]/div'))

                 )

                 # 重新获取课程元素并点击

                 course1 = 跟单网gendan5.comself.driver.find_elements(By.XPATH, '//div[@class="j-breadcb f-fl"]//div[@class="f-fl j-lesson"]/div/div[2]/div')

                 course1[c_index].click()

                 time.sleep(2)

                 try:

                     try:

                         # 获取讨论元素

                         disc = self.driver.find_element(By.XPATH, '//li[@title=" 讨论:讨论话题 "]/span[2]')

                         if disc.is_enabled(): # 如果讨论元素存在且可以点击

                             disc.click()

                             self.discuss() # 调用讨论函数

                     except:

                         time.sleep(0.5)

                         if course_names[c_index] == ' 讨论区 ':

                             self.discuss()

                 except:

                     pass

     # 讨论

     def discuss(self):

         # 等待“回复”元素出现

         WebDriverWait(self.driver, 100).until(

             EC.presence_of_element_located((By.XPATH, '//div[@class="optbar f-cb"]/a[1]/span'))

         )

         time.sleep(0.5)

         self.driver.execute_script("var q=document.documentElement.scrollTop=10000")

         time.sleep(0.5)

         try:

             content = self.driver.find_element(By.XPATH, '//div[@class="j-list"]/div/div[3]/div/div[2]/p').text

         except:

             content = self.driver.find_element(By.XPATH, '//div[@class="j-list"]/div/div[1]/div/div[2]').text

         self.driver.switch_to.frame(0)

         time.sleep(0.5)

         # 定位输入框并输入信息

         self.driver.find_element(By.XPATH, '//body[@contenteditable="true"]').send_keys(content)

         self.driver.switch_to.window(self.driver.window_handles[-1])    # 进行窗口切换

         time.sleep(1)

         # 点击发送回复

self.driver.find_element(By.XPATH,'/html/body/div[5]/div[2]/div[4]/div[2]/div/div[1]/div/div/div[3]/div[2]/div[2]/div/div/div[5]/div/div[1]/div[2]/a[1]').click()

     def run(self):

         self.login()

         self.entering_the_course()

mooc = MOOC()

mooc.run()


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946337/viewspace-2922139/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-23

  • 博文量
    410
  • 访问量
    276750