首页 > IT职业 > IT生活 > 【老师见打系列】:我只是写了一个自动回复讨论的脚本~
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/ ,如需转载,请注明出处,否则将追究法律责任。