软件效果:

实现原理很简单,就是封装谷歌翻译网站: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. [crunch bang]在Crunch Bang安装和设置fcitx(小企鹅输入法)

    试来试去还是喜欢小企鹅多一些 第一步:在终端下 sudo apt−get install fcitx fcitx−sunpinyin  fcitx-ui-classic fcitx-table sud ...

  2. empty()、html("")和text("")

    empty().html("")和text("")在删除匹配元素内内容时是一样的.jQuery源码中实现有所不同,但效果相同.可以测试一下源码: <!DO ...

  3. 详解Android AM命令

    1.简介 在Android中,我们除了从界面上启动程序之外,还可以从命令行启动程序,如使用命令行工具am. am全称activity manager,是Android下非常实用命令,其代码在frame ...

  4. Java中的get()和set()方法

    对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 如果你对于这两个方法还有困惑甚至完全不知道这两个方法是做什么的, ...

  5. SessionHelper

    MXS&Vincene  ─╄OvЁ  &0000009 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...

  6. android 学习随笔一(配置调试与基础)

    一.基础与开发环境安装配置 Memory Options: VM Heap表示每个应用所能占用的最大内存. Android 项目目录结构 SRC java源码 android.jar 导入jar才能使 ...

  7. [转]bit与byte

    本文为转载,感谢博主的分享.原文地址:http://www.cnblogs.com/flyme/archive/2011/08/25/2153596.html bit意为“位”或“比特”,是计算机运算 ...

  8. 鸟哥的Linux私房菜之学习shell script

    运行程序的时候一般都是创建一个子程序来执行,所以子程序中的变量什么的在当前的shell下没法使用,但是如果使用source来执行就可以在当前shell下执行程序 shift 1 去掉第一个参数,后面接 ...

  9. TreeNode动态邦定事件

    1. 显示不能用TextField,应该用StaticText 2. public void SetNodesAction(Tree t, String methodbind){ ArrayList ...

  10. 创建laravel项目时打开浏览器常见错误

    1.Whoops, looks like something went wrong. 打开:D:\java\wamp\www\subway\app\config\app.php 修改:'debug' ...