一、逻辑描述:
1.从EXCEL中拿出需要翻译的内容
2.判断拿出来的内容是否为空,如果是空的,不执行翻译函数。否则,提取新的表格内容
3.拿到表格内容
4.使用selenium.webdriver打开浏览器,并打开有道翻译
5.找到输入的地方,把表格内容传进去
6.等待1s
7.获取翻译结果。如果翻译报错,抛出异常返回原来的内容
8.把翻译结果写入下一列的相同行
9开始下一次循环
二、细节描述+代码
1.1.从EXCEL中拿出需要翻译的内容。(1.xlsx)存放的是需要翻译的数据。
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import logging
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
#从excel中获取需要翻译的内容
import openpyxl
wb = openpyxl.load_workbook('1.xlsx')#目标文件
type(wb)
sheet = wb.get_sheet_by_name('Sheet1')
2.设置翻译行数(下面代码的意思是从第1行翻译到第end行),end在运行后自行输入。
Start=1 #起始行
end=int(input('请输入需要翻译的行数!'))#末行
val=1 #间隔
3.翻译函数展示,这个函数的作用是拿到提取到表格后的内容打开浏览器翻译并得到翻译结果,翻译结果赋值给 result 参数
def fanyi():
global result
global result0
global logger
logger.info('翻译内容:'+str(data))
#启动浏览器翻译网址
options = EdgeOptions()
options.add_argument(r"--headless")
driver = webdriver.Edge(executable_path=r"MicrosoftWebDriver.exe", capabilities=options.to_capabilities())
driver.get('https://fanyi.youdao.com/index.html#/')
#time.sleep(1)
#定位输入的位置
button = driver.find_element_by_id('js_fanyi_input')
#输入需要翻译的内容
button.send_keys(data)
time.sleep(1)
try:
result = driver.find_element_by_class_name('resultOutput').text
except:
result = result #出现翻译不了的,返回原始数据
print(type(result))
#print('翻译后的结果:'+str(result))
logger.info('翻译结果:'+str(result))
driver.close()
logger.info('剩余 '+str((end-i))+' 条!')
logger.info('计数器:'+str(i))
4.下面这段代码是把excel中拿出来的数据调用fanyi方法最后把翻译结果存到2.xslx,sheet页中的A列。
for i in range(Start, end,val):#1行1列,不包含中间那一行
data=(i, sheet.cell(row=i, column=1).value)
print('元组: '+str(data))
if(data==(i,None)):
print('数据表为空!不执行!')
logger.warning('第 '+str(i)+' 行数据表为空!不执行!:'+str(result))
else:
print('数据表不为空!开始执行')
print('需要翻译的信息:'+str(data[1]))
data=data[1]
if(data=='None'):
print('this is Null!')
else:
fanyi()
print('翻译结果:'+str(result))
sheet['A'+str(i)]=result
wb.save('2.xlsx') #结果文件
print('预期结果'+str(sheet['A'+str(i)]))
print('------------第 '+str(i)+' 行写入成功!------------')
print('\n剩余 '+str((end-i))+' 条!')
print('\n标题翻译预计完成时间是 '+str(((end-i)*8)/60)+' 分钟后!请耐心等待!')
print('计数器:'+str(i))
5.运行结果展示
运行前2.xlsx是这个样子
运行后效果是这样的:
End,展示结束!感谢浏览!
如有不同的看法,请留言!