•项目描述
Ctrl+右键,一键实现选定段落翻译。
•用到的技术
1.使用ahk脚本定义快捷键,实现一键调用程序.
2.使用selenium爬取百度翻译.
3.使用隐式等待判断ajax返回.
•实现的效果
选定段落,按Ctrl+右键
前言
AutoHotKey,是一款免费的、Windows平台下开放源代码的热键脚本语言。使用它可以快速将一系列重复性操作打包,通过一个热键取用,进而极大的提升工作效率。这个操作类似于office系列里的自定义宏,你可以自己写ahk代码,也可以采用软件录制,非常方便。
这个随手翻程序非常简单,大概只用50行代码,旨在为大家提供一种思路:使用热键+可执行程序,建化繁复的操作。
编程思路
大体思路是这样的:首先ahk将你用鼠标选定的文字段落保存,然后调用翻译程序(我这里是使用python去爬百度翻译,也可以用其他翻译或者翻译软件都行),将选定文字当做参数传递给python程序,python程序去爬取百度翻译,然后显示翻译结果。
运行环境
操作系统:win7
软件:autohotkey, python3.6,Chrome
其他包:selenium
代码
ahk代码:
^RButton::
send ^c
IfWinNotExist, F:\python\python.exe
{
run C:\Users\admin\Desktop\AutoHotkey\Translation.py
Return
}
IfWinNotActive, F:\python\python.exe, , WinActivate, F:\python\python.exe,
WinWaitActive, F:\python\python.exe,
Send {ENTER}
Return
注释:
快捷键设置为Ctrl+右键,将选定文字copy到粘贴板,检测py程序是否已经在运行,如果不是,则打开程序,如果已经打开,则调出程序,模拟输入回车。
python代码:
from selenium import webdriver
from time import sleep
import pyperclip
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
#无头模式
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options = chrome_options)
#普通模式
# driver = webdriver.Chrome() #如果要查看具体怎么操作的可以使用普通模式
driver.get('https://fanyi.baidu.com/')
print('请输入所要翻译的文字:')
while True:
inputs=pyperclip.paste()# 把粘贴板的文字作为输入
print(inputs)
# 等待显示输入框,并输入所要翻译的文字
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//textarea[@ id='baidu_translate_input']"))
driver.find_element_by_xpath("//textarea[@ id='baidu_translate_input']").send_keys(inputs)
driver.find_element_by_xpath("//a[@ id='translate-button']").click()
# 等待翻译的结果,如果一定时间内没有显示,则再输入一次
sleep(0.5)
try:WebDriverWait(driver, 10).until(lambda driver:driver.find_elements_by_xpath("//p[@ class='ordinary-output target-output clearfix']/span"))
except Exception as e:
print('*'*10+'loading......'+'*'*10)
driver.find_element_by_xpath("//textarea[@ id='baidu_translate_input']").clear()
continue
sleep(0.5)
# 找到翻译的结果,并显示出来
txt=[x.text for x in driver.find_elements_by_xpath("//p[@ class='ordinary-output target-output clearfix']/span")]
print(txt)
# 清空输入框里的内容
driver.find_element_by_xpath("//textarea[@ id='baidu_translate_input']").clear()
# 使用input()暂停程序,下次翻译时,ahk脚本中会输入一个回车,再次进入循环。
input()
driver.quit()
其他说明
1.如果你的电脑中有翻译软件,则可以使用ahk调用翻译软件进行翻译。
2.爬取百度翻译的时候,发现百度翻译使用Ajax技术传递的表单里面有加密项,所以采用selenium 爬虫会更方便。
3.如果ahk脚本不会写可以使用AutoScriptWriter进行脚本录制,简单方便。
4.ahk还可以做更多的事情,比如管理自己的账号密码,如果你不放心让网页保留你的账号信息的话。或者写简单的游戏脚本,我也只是偶尔用它写个自动刷副本的脚本(小心别被封号哦!)。还可以配合word或者Excel里面的宏,提高自己工作效率,从重复性工作中解放出来。
5.可在autohotkey帮助文档中找到其他更有意思的优秀脚本。
链接
更多autohotkey的用法请参考:autohotkey帮助文档中文版
更多有关selenium 爬虫的讲解:虫师–selenium讲解
有关python爬虫的讲解:Python3网络爬虫开发实战教程