python autohotkey_使用autohotkey与selenium实现随手翻

•项目描述

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网络爬虫开发实战教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值