-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpingjiao.py
More file actions
107 lines (97 loc) · 5.67 KB
/
pingjiao.py
File metadata and controls
107 lines (97 loc) · 5.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import random
import re
import time
import getpass
from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--disable-infobars")
print("说明:\n不喜欢的老师全部4星中好评~\n等待时间较长属于正常现象,一个页面最长可加载1分钟,请不要点击页面元素~\n请保持弹出的浏览器界面在最顶层,如果出现意外,比如报错退出,请重新运行~~")
name = input("学号:\n>>")
password = getpass.getpass("密码:\n>>")
unfavoredTeacher = set()
s = input("在此输入你不喜欢的老师的名字,输入#结束\n>>")
while s != '#':
unfavoredTeacher.add(s)
s = input('>>')
driver = webdriver.Chrome(options=options)
#默认使用Chrome浏览器
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("http://ehall.xjtu.edu.cn/")
driver.find_element(By.XPATH, '//*[@id=\"ampHasNoLogin\"]').click()
driver.find_element(By.XPATH, '//*[@id="form1"]/input[1]').send_keys(name)
driver.find_element(By.XPATH, '//*[@id="form1"]/input[2]').send_keys(password)
driver.find_element(By.XPATH, '//*[@id="account_login"]').click()
time.sleep(1)
# if "您目前的登录密码过于简单……建议您立即修改密码。" click "下次再说"
# find if there's van_dialog1 class
if len(driver.find_elements(By.CLASS_NAME, value='van-dialog1')) != 0:
driver.find_element(By.XPATH, '//*[@id="passTip_know"]').click()
time.sleep(5)
driver.find_element(By.XPATH, '//*[@id="ampPersonalAsideLeftMini"]/div/div[2]').click()
time.sleep(5) # 给动画多一点时间,否则下一行有小概率会失败
driver.find_element(By.XPATH, '//*[@id="ampPersonalAsideLeftTabHead"]/div[2]/i').click() # 添加 点击可用应用
driver.find_element(By.XPATH, '//*[@id="ampPersonalAsideLeftAllCanUseAppsSearchInput"]').send_keys('网上评教',
Keys.ENTER) # 添加 点击可用应用
time.sleep(1)
driver.find_element(By.XPATH,
'/html/body/article[5]/aside[1]/div[2]/div[2]/div[2]/div[2]/ul/li[1]/span[1]').click() # dianjiquanbu
time.sleep(1)
driver.find_element(By.XPATH, '//*[@id="ampPersonalAsideLeftAllCanUseAppsTabContent"]/div[1]/div/h5').click() # 报错位置
time.sleep(2)
if (len(driver.find_elements(By.XPATH, '//*[@id="ampDetailEnter"]')) != 0):
driver.find_element(By.XPATH, '//*[@id="ampDetailEnter"]').click()
time.sleep(2)
handles = driver.window_handles
driver.switch_to.window(handles[-1])
time.sleep(2)
driver.find_element(By.XPATH, '//*[@id="12aa5b5d-3791-4a69-8fda-6e1768da4d97"]').click()
time.sleep(2)
driver.find_element(By.XPATH, '//*[@id="pjglTopCard"]').click()
time.sleep(2)
driver.find_element(By.XPATH, '//*[@id="tabName-content-1"]/div/div[1]').click()
time.sleep(2)
# /html/body/div[7]/div/div[1]/section/div/div[2]/div[2]/div[2]/div/ div[2] /div[4]/div/span[1]
# /html/body/div[7]/div/div[1]/section/div/div[2]/div[2]/div[2]/div/ div[1] /div[4]/div/span[1]
div_list = driver.find_elements(By.XPATH, '/html/body/div[7]/div/div[1]/section/div/div[2]/div[2]/div[2]/div/div')
overtime = 0
for num in range(0, len(div_list)):
div = driver.find_element(By.XPATH, '/html/body/div[7]/div/div[1]/section/div/div[2]/div[2]/div[2]/div/div[' + str(1 + overtime) + ']') # 永远都是点击第一个
if len(div.find_elements(by=By.XPATH, value='./div[4]/div/span[1]')) == 0:
overtime += 1
continue
# 有些人评教逾期,没有立即评教按钮,要判断一下
div.find_element(by=By.XPATH, value='./div[4]/div/span[1]').click() # 进入评价页面
time.sleep(2)
# //*[@id="buttons"]/button
if len(driver.find_elements(By.XPATH, '//*[@id="buttons"]/button')) != 0:
driver.find_element(By.XPATH, '//*[@id="buttons"]/button').click()
div_answer_list = driver.find_elements(By.XPATH, '/html/body/div[' + str(8 + num - overtime) + ']/div/div[1]/section/div[2]/div')
# /html/body/div[9]/div/div[1]/section/div[2]/div[1] 第二次的xpath和第一次不一样???????
time.sleep(2)
name = re.findall('<div class="sc-panel-thingNoImg-1-title">(.*?)</div>', driver.page_source, re.S)
if name[0] in unfavoredTeacher:
for div_answer, index in zip(div_answer_list, range(0, len(div_answer_list))):
if index == len(div_answer_list) - 1:
div_answer.find_element(by=By.XPATH,value='./div/div[2]/div[2]/div/div/div/div[1]/div/div/div/textarea').send_keys(
random.choice(
["可以更好"]))
else:
div_answer.find_element(by=By.XPATH, value='./div/div[2]/div[2]/div/label[2]').click()
else:
for div_answer, index in zip(div_answer_list, range(0, len(div_answer_list))):
if index == len(div_answer_list) - 1:
div_answer.find_element(by=By.XPATH,
value='./div/div[2]/div[2]/div/div/div/div[1]/div/div/div/textarea').send_keys(
random.choice(
["真棒", "老师教的很好", "很好", "Excellent!", "很棒", "Good"]))
else:
div_answer.find_element(by=By.XPATH, value='./div/div[2]/div[2]/div/label[1]').click()
div.find_element(by=By.XPATH, value='//a[contains(text(),"提交")]').click() # 提交
div.find_element(by=By.XPATH, value='//a[contains(text(),"确认")]').click() # 确认
time.sleep(5)
print("end")
print("finished.")