C#借助谷歌翻译实现翻译小工具(一)基本功能实现
软件效果:
实现原理很简单,就是封装谷歌翻译网站:http://translate.google.cn/,一个WebBrowser“肢解”谷歌翻译网站的HtmlElement元素,删除不要的,留下需要的就是了,没什么难度
实现步骤:
一个winform窗体+一个WebBrowser控件
设置WebBrowser的URL为谷歌翻译网站,删除不需要的html元素
全部代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Shown += Form1_Shown;
}
const string url = "http://translate.google.cn/?hl=zh-cn#zh-CN/en/%E6%9D%A5%E8%87%AA%0Ahttp%3A%2F%2Ftranslate.google.cn%2F";
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Url = new Uri(url);
}
void Form1_Shown(object sender, EventArgs e)
{
while (webBrowser1.Document == null)
Application.DoEvents();
HtmlElement element;
deleteAllElement(webBrowser1.Document.Body, "DIV", "gt-c", out element);
deleteAllElement(element, "DIV", "gt-form-c", out element);
deleteAllElement(element, "FORM", "gt-form", out element);
deleteAllElement(element, "DIV", "gt-text-all", out element);
deleteAllElement(element, "DIV", "gt-main", out element);
deleteAllElement(element, "DIV", "gt-text-c", out element);
deleteElementByID(element, "gt-ft"); //获得gc-text-top元素
foreach (HtmlElement ele in element.Children)
{
if (ele.Id == "gt-text-top")
{
element = ele;
break;
}
} #region 去掉 上传,帮助
HtmlElement srcElement = null;
foreach (HtmlElement ele in element.Children)
{
if (ele.Id == "gt-src-c")
{
srcElement = ele;
break;
}
}
deleteAllElement(srcElement, "", "gt-src-p", out srcElement);
deleteAllElement(srcElement, "DIV", "gt-src-wrap", out srcElement); #endregion
//去掉有错误
#region 去掉 上传,帮助
HtmlElement resElement = null;
foreach (HtmlElement ele in element.Children)
{
if (ele.Id == "gt-res-c")
{
resElement = ele;
break;
}
}
deleteAllElement(resElement, "", "gt-res-p", out resElement);
deleteAllElement(resElement, "", "gt-res-data", out resElement);
deleteAllElement(resElement, "DIV", "gt-res-wrap", out resElement);
deleteElementByID(resElement, "gt-res-tools");
#endregion
} void deleteAllElement(HtmlElement HtmlEle, string TagName, string IgroneID, out HtmlElement element)
{
element = null;
if (HtmlEle == null) return;
List<HtmlElement> lst = new List<HtmlElement>(); foreach(HtmlElement div in HtmlEle.Children)
{ if (!String.IsNullOrEmpty(TagName) && div.TagName != TagName) continue;
if (div.Id != IgroneID)
{
lst.Add(div); }
else
element = div;
}
foreach (HtmlElement ele in lst)
{
IHTMLDOMNode node = ele.DomElement as IHTMLDOMNode;//this.webBrowser1.DomElement as mshtml.IHTMLDOMNode;
if (node != null)
{
node.parentNode.removeChild(node);
}
}
}
void deleteElementByID(HtmlElement HtmlEle, string DeleteID)
{ foreach (HtmlElement div in HtmlEle.Children)
{ if (div.Id == DeleteID)
{
IHTMLDOMNode node = div.DomElement as IHTMLDOMNode;//this.webBrowser1.DomElement as mshtml.IHTMLDOMNode;
if (node != null)
{
node.parentNode.removeChild(node);
}
return; }
} }
}
下载地址:CSDN下载
下一节:
C#借助谷歌翻译实现翻译小工具(二)添加托盘图标
C#借助谷歌翻译实现翻译小工具(一)基本功能实现的更多相关文章
- 【开源一个小工具】一键将网页内容推送到Kindle
最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...
- 在windows下实时监控、接受文件变化小工具
在windows下实时监控文件变化小工具 在测试的时候,我们可能想实时监控系统打出的log信息,在unix系统上我们可以用"tail -f"实现,在windows下一般就无法做 ...
- 谈谈开发文本转URL小工具的思路
URL提供了一种定位互联网上任意资源的手段,由于采用HTTP协议的URL能在互联网上自由传播和使用,所以能大行其道.在软件开发.测试甚至部署的环节,URL几乎可以说无处不再,其中用来定位文本的URL数 ...
- OpenCV与MFC实战之图像处理 样本采集小工具制作 c++MFC课程设计
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12111102.html 入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果, ...
- 小白突破百度翻译反爬机制,33行Python代码实现汉译英小工具!
表弟17岁就没读书了,在我家呆了差不多一年吧. 呆的前几个月,每天上网打游戏,我又不好怎么在言语上管教他,就琢磨着看他要不要跟我学习Python编程.他开始问我Python编程什么?我打开了我给学生上 ...
- 基于百度通用翻译API的一个翻译小工具
前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...
- (win环境)使用Electron打造一个桌面应用翻译小工具
初始化项目 npm init 修改package.json {"name": "trans","version": "1.0.0& ...
- 练习-99乘法表 token生成器 翻译小工具
一.99乘法表 1.1 技术点 记住: for 循环的使用,以及for的嵌套使用 range()的使用,掌握sep为负数的使用的使用. print() 函数的使用,默认的结尾的换行符 替换 end= ...
- Windows下好用到必须开机自启的小工具
折腾过linux,黑苹果,最后还是回到了盖茨大叔的windows.得出的结论是,日常使用的话,折腾Linux还不如把精力去拿去折腾windows.分享下折腾的成果,介绍下一些很不错的小工具. ...
随机推荐
- DB2 Unload 的时候遇到B37-04
B37-04的问题是每个Mainframer首先会遇到的问题,在Unload的时候最大的可能性是Extend次数到16次了,这时候只要加大primary或secondary就可以了,我最常用的是pri ...
- 如何在WPF应用程序中使用视频处理控件TVideoGrabber
要在WPF 中使用 TVideoGrabber 组件,需要像下面的方法来使用 VS.NET(DLL) 版本的组件: ——复制TVideoGrabber_x.x.x.x_x86.dll到c:/windo ...
- 69道Java Spring 面试&笔试题
目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...
- linux设备驱动归纳总结(三):4.ioctl的实现【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59419.html linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简介: 虽 ...
- SendKeys:基本使用
使用SendKeys将键击和组合键击发送到活动应用程序.此类无法实例化.若要发送一个键击给某个类并立即继续程序流,请使用Send.若要等待键击启动的任何进程,请使用SendWait. 每个键都由一个或 ...
- linux乱码
修改系统变量: export LANG=en
- iOS直播的技术分析与实现
HTTP Live Streaming直播(iOS直播)技术分析与实现 发布于:2014-05-28 13:30阅读数:12004 HTTP Live Streaming直播(iOS直播)技术分析与实 ...
- Hive报错之java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory
一.问题: 在使用Hive0.11进行select查询的时候报: hive,),site from zhifu; Total MapReduce jobs Launching Job out In o ...
- python中列表和字典常用方法和函数
Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...
- JavaScript脚本语言基础(一)
导读: JavaScript代码嵌入HTML文档 JavaScript代码运行方式 第一个实例 JavaScript的三种对话框 定义JavaScript变量 JavaScript运算符和操作符 Ja ...