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.分享下折腾的成果,介绍下一些很不错的小工具. ...
随机推荐
- 深入了解webservice_概念总结
最近公司需要对java web端的第三方接口进行测试,使用WebService+TestNG实现,TsetNg是常用的自动化测试框架,这就不介绍了. WebService是一种跨编程语言和跨操作系统平 ...
- Fragement
package com.exmple.frage; import java.util.ArrayList; import java.util.Calendar; import java.util.Ha ...
- 160929、各数据库连接配置与maven依赖安装
最近做的项目都是maven的,据说maven是个东西.把依赖的jar文件的事情都委托出去辣!试着用了一下哈,效果还可以! 今天做了数据库配置这一块,特意把相关的东西总结出来,以备不时之需. MySQL ...
- iOS delegate, 代理/委托与协议.
之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, ...
- oracle sqlloader 用法
向oracle中导入*.csv文件 1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通 ...
- (转载)CSV 文件处理 PERL
http://cn.perlmaven.com/how-to-read-a-csv-file-using-perl http://search.cpan.org/~hmbrand/Text-CSV_X ...
- Hibernate,JPA注解@ManyToMany_JoinTable
可以通过@ManyToMany注解可定义的多对多关联.同时,也需要通过注解@JoinTable描述关联表和关联条件.如果是双向关联,其中一段必须定义为owner,另一端必须定义为inverse(在对关 ...
- WKWebView与Js实战(OC版)
前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交 ...
- Nagios监控远端的mysql
工作原理: 利用特定的用户定期访问指定的mysql数据库.当不能访问或连不通时则报警. 1.在生产库上安装nagios插件 安装略 备注:编译完显示一定要有mysql支持,不然没有chec ...
- Apache Mina 入门实例
这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 L ...