今天我们用selenium+chrome来自动写入批改网的作业,老师为了让我们认真的写作业会把复制粘贴的功能给锁了,但这怎么可能难得倒我们学程序的呢,看我写程序自动帮忙写入
目录:
1、准备环境
2、分析需求
3、实现功能
1、准备环境
python:python3.7.3
首先要确保安装好selenium库和对应浏览器的驱动,若没有安装可以参考前面的文章——爬虫开发环境部署
2、分析需求
3、功能实现
对着需求我们一步步实现
一、登陆
第一步:输入账号密码
第二步:点击登陆
账号在id为userName的input标签
密码在id为password的input标签
登陆在class为loginBtn的button标签
def log_in():
"""输入用户名和密码并登录"""
browser.get(url)
# 输入邮箱
browser.find_element_by_id('userName').send_keys(email) # //*[@id="userName"]
# 输入密码
browser.find_element_by_id('password').send_keys(password) # //*[@id="password"]
# 点击查找作业
browser.find_element_by_class_name('loginBtn').click()
# //*[@id="searchRegId"]/form/div[3]/button
find_work()
二、查找作业
第一步:输入作业页号
第二步:点击查找
这里需要先清空输入作业号的输入框,不然“请输入作业号”这几个字不会消失
输入作业号在name为rid的input标签
先调用clear()清空输入框,在调用send_keys()输入作业号
查找作文按钮在class为sf_bt的button标签
调用click()点击按钮
def find_work():
"""进入未完成的作业"""
# 作业号
input_num = browser.find_element_by_name('rid')
input_num.clear()
input_num.send_keys(work_num)
# 查找作业 //*[@id="searchRegId"]/form/div[3]/button
browser.find_element_by_class_name('sf_bt').click()
三、获取原文
这里以000001号作业为例
这里选择使用XPath提取文本
传入的content为网页源码,regex为XPath规则,返回目标文本
def get_page(content, regex):
"""获取翻译原文"""
etree = html.etree
a = etree.HTML(content)
test = a.xpath(regex)
return test
四、翻译原文
这里选择把文本传入谷歌翻译
text = get_page(content, text_regex) # 得到原文
google_url = 'https://translate.google.cn/#view=home&op=translate&sl=auto&tl=en&text=%s' % text[0]
switch_the_window(google_url, 1) # 创一个新的选项卡
content = browser.page_source
谷歌翻译的url中有个参数就是需要翻译的文本,所以直接将文本加入url中就好了,将url传入方法switch_the_window()中,这个方法是用来打开一个新的页面的,为的是获取译文
def switch_the_window(url=None, num=None):
"""为谷歌翻译打开新的一个选项卡"""
if url:
browser.execute_script('window.open()')
browser.switch_to.window(browser.window_handles[num])
if url:
browser.get(url)
五、输入译文
正文输入框在id为contents的textarea标签
def input_text(text):
"""将译文写进批改网"""
# //*[@id="contents"]
input_content = browser.find_element_by_id('contents')
input_content.clear()
input_content.send_keys(text)
最后一步提交作业
提交按钮在class为d3的a标签
def submit():
"""提交作业"""
button = browser.find_element_by_class_name('d3')
button.click()