python+selenium+至善网
使用python的第三方库selenium操作Chrome浏览器自动化完成至善网的学习
本文源码:https://gitee.com/ioucon/python-selenium
一、准备工作
-
安装 python 3.7
-
安装 selenium
-
下载 Chromedriver
-
安装 requests
二、主要代码
1. 登录
1.1 需要手动输入验证码
-
版本①
driver.get("http://www.attop.com/index.htm") sleep(1) def login(username, password): driver.find_element_by_xpath("/html/body/div[2]/div/div/ul/li[4]/a[1]").click() sleep(1) driver.switch_to_frame(driver.find_element_by_xpath('//*[@id="pageiframe"]')) driver.find_element_by_name("username").send_keys(username) driver.find_element_by_name("password").send_keys(password) rand = input("输入验证码:") driver.find_element_by_name("rand").send_keys(rand) driver.find_element_by_class_name("btn_logon").click() sleep(1)
-
版本②
driver.get("http://www.attop.com/login_pop.htm") sleep(1) def login(username, password): driver.find_element_by_name("username").send_keys(username) driver.find_element_by_name("password").send_keys(password) rand = input("输入验证码:") driver.find_element_by_name("rand").send_keys(rand) driver.find_element_by_class_name("btn_logon").click() sleep(1)
②相比于①,直接通过登录入口,减少了多余的步骤。
1.2 接入打码平台
2. 习题
def doXt(data):
xt_li_list = driver.find_elements_by_xpath('//*[@id="showajaxinfo"]/div[2]/dl/dd[1]/ul/li')
sleep(1)
for xt_li in xt_li_list:
xtName = xt_li.find_element_by_xpath('.//p').text
ans = data.get(xtName)
if ans == None:
continue
op_li_list = xt_li.find_elements_by_xpath('.//ul/li')
try:
statu = driver.find_element_by_xpath('//*[@id="xt_18001"]/h5/span/strong').text
if statu == '答题正确':
continue
elif statu == '待回答':
for op_li in op_li_list:
if op_li.text in ans:
if op_li.find_element_by_xpath('./input').get_attribute('checked') != "true":
op_li.find_element_by_xpath('./input').click()
else:
continue
except:
for op_li in op_li_list:
if op_li.text in ans:
if op_li.find_element_by_xpath('./input').get_attribute('checked') != "true":
op_li.find_element_by_xpath('./input').click()
try:
driver.find_element_by_xpath('//dd[@class="alignCenter"]/a[@class="btn100_org"]').click()
sleep(1)
driver.find_element_by_xpath('//div/button[1]').click()
except:
pass
3. 媒材评价
def doMshow():
p_list = driver.find_elements_by_xpath('//*[@id="showajaxinfo"]/div[1]/dl/dd/p')
sleep(1)
for p in p_list:
try:
pj = p.find_element_by_class_name('BT_ping').text
if pj == "马上评价":
p.find_element_by_xpath('./a').click()
driver.switch_to_frame(driver.find_element_by_xpath('//*[@id="pageiframe"]'))
sleep(1)
driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/p/input[3]').click()
driver.find_element_by_xpath('/html/body/div[1]/div//tr[2]/td[2]/div//tr[3]/td/div/button[1]').click()
sleep(1)
# 此处注意:由于上面切换到frame,这里需要切回原页面
driver.switch_to_default_content()
driver.find_element_by_xpath("//div/a[@class='aui_close']").send_keys(Keys.ENTER)
# 递归的方法速度太慢,还需要进一步完善
doMshow()
except:
continue
4. 方糖推送
前提:登录方糖推送,获取SCKEY,并绑定自己的微信
方糖:http://sc.ftqq.com/3.version
把自己SCKEY填入下方key中
def sendMessage(username,password,coursename,score):
key = ''
url = 'https://sc.ftqq.com/{}.send'.format(key)
data = {
'text':'至善网:'+username+'\n当前分数:'+score,
'desp':'''
# 至善网:
#### 账号:{}
#### 密码:{}
#### 科目:{}
#### 分数:{}
'''.format(username,password,coursename,score)
}
requests.post(url,data)
加入方糖后,可以通过微信接收到完成提醒,不需要一直盯着电脑。
——未完,有空再更新