软件效果:

实现原理很简单,就是封装谷歌翻译网站: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#借助谷歌翻译实现翻译小工具(一)基本功能实现的更多相关文章

  1. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

  2. 在windows下实时监控、接受文件变化小工具

    在windows下实时监控文件变化小工具   在测试的时候,我们可能想实时监控系统打出的log信息,在unix系统上我们可以用"tail -f"实现,在windows下一般就无法做 ...

  3. 谈谈开发文本转URL小工具的思路

    URL提供了一种定位互联网上任意资源的手段,由于采用HTTP协议的URL能在互联网上自由传播和使用,所以能大行其道.在软件开发.测试甚至部署的环节,URL几乎可以说无处不再,其中用来定位文本的URL数 ...

  4. OpenCV与MFC实战之图像处理 样本采集小工具制作 c++MFC课程设计

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12111102.html 入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果, ...

  5. 小白突破百度翻译反爬机制,33行Python代码实现汉译英小工具!

    表弟17岁就没读书了,在我家呆了差不多一年吧. 呆的前几个月,每天上网打游戏,我又不好怎么在言语上管教他,就琢磨着看他要不要跟我学习Python编程.他开始问我Python编程什么?我打开了我给学生上 ...

  6. 基于百度通用翻译API的一个翻译小工具

    前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...

  7. (win环境)使用Electron打造一个桌面应用翻译小工具

    初始化项目 npm init 修改package.json {"name": "trans","version": "1.0.0& ...

  8. 练习-99乘法表 token生成器 翻译小工具

    一.99乘法表 1.1 技术点 记住: for 循环的使用,以及for的嵌套使用 range()的使用,掌握sep为负数的使用的使用. print() 函数的使用,默认的结尾的换行符 替换 end= ...

  9. Windows下好用到必须开机自启的小工具

    折腾过linux,黑苹果,最后还是回到了盖茨大叔的windows.得出的结论是,日常使用的话,折腾Linux还不如把精力去拿去折腾windows.分享下折腾的成果,介绍下一些很不错的小工具.     ...

随机推荐

  1. 自定义Writable、RawComparatorWritable、comparators(转)

    自定义Writable hadoop虽然已经实现了一些非常有用的Writable,而且你可以使用他们的组合做很多事情,但是如果你想构造一些更加复杂的结果,你可以自定义Writable来达到你的目的,我 ...

  2. SQL SERVER2000中订阅与发布的具体操作

    同步过程 一.准备工作,如果完成则可跳过. 1.内网DB服务器作为发布服务器,外网DB服务器作为订阅服务器. 发布服务器和订阅服务器上分别创建Windows用户jl,密码jl,隶属于administr ...

  3. android实操--练习1

    这两天有空,打算把一些文档整理一下,快要考试了,找一些简单的例子来做做,重温安卓的知识. 下面是第一个练习: 实现很简单,下面我们来看看: 首先新建一个安卓项目Demo1 接着是界面的布局(包括act ...

  4. ubunu下用命令设置壁纸

    ubunu下用命令设置壁纸: gsettings set org.gnome.desktop.background picture-uri “file:[fileName]” eg:gsettings ...

  5. PL/SQL显示行号和高亮当前行

    PL/SQL Developer 如何显示行号: PL/SQL Developer 高亮当前行: OK!

  6. Android内存溢出解决方案(OOM)

    众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...

  7. shell小细节

    1.使用变量的时候无需首先声明其类型 2 cut 剪切数据 3.sed 定址 4.read 读取文件(管道) 5 expr 整值计算 6 lp 打印

  8. 7、XML加强/Web开发/Tomcat

    1 XML加强 XML加强 1)Dom4j修改XML文档 写出xml文档: XMLWriter writer = new XMLWriter() writer.wrtite(doc); 增加: Doc ...

  9. setw和setfill控制输出间隔

    在C++中,setw(int n)用来控制输出间隔.例如:cout<<'s'<<setw(8)<<'a'<<endl;则在屏幕显示s a //s与a之间 ...

  10. SlickGrid example 3b: 支持撤销操作的编辑单元

    不同类型的属性可以按不同的风格编辑. 每个编辑单元可以设置不同的验证方法. 历史编辑可以撤销.   代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTM ...