<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
寫這篇文章只是想證明一下:本博主還在呼吸
許久未更,甚是想更吶~
這段時間生活中充斥著各種事情,感覺每天都在忙忙碌碌,偶而停下疲憊的身軀,突然擡頭,卻不知自己身處何方,忙了這麼久,到底在忙些什麼呢?找不著方向,於是開始惶恐,便又不知方向的胡亂奔走……,好吧好吧,總結兩個字:迷茫,再加兩個字:瞎忙……
其實這幾天一直想寫部落格的,想寫有趣又輕鬆的一篇文章,但又不到寫哪些內容比較好,又因還要解決各種事情,於是就擱到了現在……
直到某天,為了完成MOOC(MOOC不會沒人不知道吧)上的回覆討論任務,我不已為然的點開了MOOC……突然?我看到了一個進度條,那個進度條彷彿就像是深淵,腦海中突然閃出一句話,我%@#!,咳咳咳,不是不是,是一句名言:當你凝望深淵,深淵也在凝望著你……
(進度條是已經用代……不是,是已經用我辛勤的勞動把它拉起來的)
不知到有沒有小夥伴經歷過要回復幾十條討論的經歷,當場看見那進度條我就……,就偷偷寫指令碼了
這個指令碼花了我比較長的時間才完成的,因為偵錯的過程有些許麻煩……,不過最終還是解決了,想看效果如何,請往下看
老操作了兄弟們~
又雙叒叕是Get_cookie.py了兄弟,看過我《小玩意兒》專欄文章的都能看爛了,但別說,還真好用,登入一次,一勞永逸,就靠它了~,話不多說,直接上號
上碼
(記得在三十秒內登入哦~)
from selenium import webdriver import time import json driver = webdriver.Chrome() driver.maximize_window() driver.get('https://www.icourse163.org/') time.sleep(30) dictCookies = driver.get_cookies() jsonCookies = json.dumps(dictCookies) # 轉換成字串儲存 with open('moocCookie.txt', 'w') as f: f.write(jsonCookies) print("cookies儲存成功")
以前回復討論咱們講究的是什麼?講究的是靈活運用Ctrl C和Ctrl V,講究的是快準狠
現在回覆討論咱們講究的是什麼?講究的是能不用手就不用手,講究的是一個 automation,科技是第一生產力呀兄弟們
什麼?相應模組怎麼下載?pip install 模組名 就完事了兄弟~
什麼?chromedriver怎麼設定?看這篇文章就完事兄弟~
【Python網路蜘蛛 · 9】:selenium模組【安裝和設定環境變數教學、提取資料操作、無頭模式】(附操作原始碼)
什麼?不會搞?看下圖幹就完事了兄弟
實現程式碼
話不多說碼來
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 = self.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()
以上就是Python實現自動回覆討論功能的指令碼分享的詳細內容,更多關於Python自動回覆討論的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45