话不多说,直接上代码。
import re
import time
import xlrd #从excel中读取数据,支持xls、xlsx
import xlsxwriter #用来生成excel表格,插入数据、插入图标等表格操作,不支持读取
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
def openBaiduFanYi():
# 无可视化界面设置 #
edge_options = Options()
# 使用无头模式
edge_options.add_argument('--headless')
# 禁用GPU,防止无头模式出现莫名的BUG
edge_options.add_argument('--disable-gpu')
# 指定msedgedriver位置和无头模式的配置
# browser = webdriver.Edge("C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe", options=edge_options)
# 使用打开浏览器的方式
browser = webdriver.Edge("C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe")
# 打开百度翻译网页
browser.get("https://fanyi.baidu.com")
return browser
# 翻译测试
def trans_test(text):
browser = openBaiduFanYi()
input_baidu = browser.find_elements(By.ID, "baidu_translate_input")
input_baidu[0].clear()
input_baidu[0].send_keys(text)
time.sleep(2) # 等待2S后取回翻译结果
res = browser.find_elements(By.XPATH, "//*[@class='ordinary-output target-output clearfix']")[0].text
print(res)
# Excel翻译
def transExcel(fromFile, toFile):
browser = openBaiduFanYi()
workbook_from = xlrd.open_workbook(fromFile) # 打开需要翻译的Excel
workbook_to = xlsxwriter.Workbook(toFile) # 创建输出Excel
# 遍历workbook_from的每个单元格,逐个翻译后写入到workbook_to
for cursheet in workbook_from.sheets():
worksheet = workbook_to.add_worksheet(cursheet.name)
for rownum in range(cursheet.nrows):
for colnum in range(cursheet.ncols):
res = cursheet.cell(rownum, colnum).value
cellvalue = str(res)
# 音译汉时,排除空单元格和非英文单元格
if cellvalue.strip() != "" and re.match('.*[a-z]+.*', cellvalue):
input_baidu = browser.find_elements(By.ID, "baidu_translate_input")
input_baidu[0].clear()
input_baidu[0].send_keys(cellvalue)
time.sleep(2)
res = browser.find_elements(By.XPATH, "//*[@class='ordinary-output target-output clearfix']")[0].text
worksheet.write(rownum, colnum, res)
browser.close()
workbook_to.close()
trans_test("好人一生平安")
# xlrd包高版本不支持读取xlsx,此处使用的时1.2.0版本
# transExcel("C:\TEST.XLS","C:\翻译TEST.XLS")
存在的问题:
翻译速度较慢,把time.sleep值改小后,会存在翻译值仍是原值的问题
一定,一定,一定要下载和本地浏览器相同版本的webdriver
不知道下载来的webdirver.exe应该放在何处,采用直接路径调用的方式
使用sendkey时,百度翻译自动探测方向,暂时没有限定翻译方向的办法
Excel里面的内容太多,可能会卡死。尴尬
输入框baidu_translate_input和输出内容ordinary-output target-output clearfix均是在翻译网页中取得。如果后期网页元素变化,需要修正
。。。。。
结论:
嗯,实现了复制粘贴。捂脸
selenium确实是网页自动化的一个好工具,用来做复制粘贴挺好。
其实百度下python翻译脚本,网上也有好多解析youdao, baidu等翻译接口来做的,大部分是几年的,有的能用,但无法批量翻译。调用翻译API普遍存在的问题是需要动态cookie,或特殊的sign验证,研究了一下百度翻译API,奈何对cookie了解有限(完全不会),最后作罢。
版权归原作者 xieshouwen 所有, 如有侵权,请联系我们删除。