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#借助谷歌翻译实现翻译小工具(二)添加托盘图标

时间: 2024-11-12 22:40:40

C#借助谷歌翻译实现翻译小工具(一)基本功能实现的相关文章

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

最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zhanjindong/SimpleSendToKindle 功能:Windows下一个简单的将网页内容推送到Kindle的工具. 写这个工具的是满足自己的需求.自从买了Kindle paperwhite 2,它就成了我使用率最高的一个电子设备.相信很多Kindle拥有者和我一样都有这样一个需求:就是白

用cefsharp写了一个保存网页为单文件html的小工具

折腾了两天,用cefsharp写成了一个保存网页为单文件html的小工具. 主要功能嘛 就是把自己感觉有用的网页保存下来,保存为一个单独的html文件. 特点嘛就是可以在保存前做一些裁剪. 见下图: 热键F11 裁剪到选中部分(也就是只保留选中部分,其它的全删除掉), 热键F12 删除掉选中部分. 文件被自动保存到C盘下的一个目录: 如果不想要图片,可以一键把页面上的图片删除掉.如下图: 查看源文件,可以发现其中的图片都是使用base64字符串方式保存的. 工具栏上[清理]的功能是删除掉 scr

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

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12111102.html 入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果,百度云链接: 链接:https://pan.baidu.com/s/1jGOD97Zx96ZDAvlkQtaPYQ 提取码:afip 运行环境VS2017,需要配置库为:opencv 题目:样本采集小工具 需求: 用MFC和opencv完成样本采集小工具. 界面功能 1.选中原图片集的目录. 2.选

Python实现翻译小工具

一.背景 利用Requests模块获取有道词典web页面的post信息,BeautifulSoup来获取需要的内容,通过tkinter模块生成gui界面. 二.代码 fanyi.py代码如下: #!/bin/env python # -*- coding:utf-8 -*- # _author:kaliarch import requests import urllib.parse import time import random import hashlib import json clas

python制作英语翻译小工具

用python爬虫可以制作英语翻译小工具.来看下代码吧- import requests,json #函数封装 def translator(): session=requests.session() i=input('请问你要翻译什么?') url='http://fanyi.youdao.com/translate' headers={ 'Referer': 'http://fanyi.youdao.com/', 'User-Agent': 'Mozilla/5.0 (Macintosh;

利用手机工具教你快速完成英语翻译在线翻译中文

利用手机工具教你快速完成英语翻译在线翻译中文?世界那么大,谁都想出去看看,可是当你遇到语言问题没法解决时,你还想出去看看吗?恐怕没人愿意,所以今天小编就为大家带来一个英语在线翻译为中文的方法,让你可以有出去看看的决心.1:打开手机翻译工具"语音翻译器"后,首先我们选择翻译模式,总共有语音翻译和文本翻译两种翻译模式,小编通常使用文本翻译模式,觉得不仅方便,而且很实用.2:选择源语种和目标语种,源语种选择中文,目标语种选择英文.3:当你想要进行翻译时,点击文本框,开始打字输入你想要进行翻译

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

折腾过linux,黑苹果,最后还是回到了盖茨大叔的windows.得出的结论是,日常使用的话,折腾Linux还不如把精力去拿去折腾windows.分享下折腾的成果,介绍下一些很不错的小工具. 一.任务栏增强信息显示 1. 把任务栏竖在左边   任务栏拿来做窗口切换工具就可以了,什么快速启动之类的交给专门的软件.而且,windows的任务栏在这方面挺出色的. 把任务栏竖起来.永不合并分组.使用小图标,可以很清晰地看到有哪些窗口,然后配合快捷键Win+数字(后面有个插件可以显示具体数字)去切换他.

Pdf文件怎么翻译,翻译pdf文件的两个好办法

Pdf文件怎么翻译,翻译pdf文件的两个好方法.现如今网络越来越发达,大家都会选择在网上查看需要的文件.资料.这时就会发现网上很多文件格式是以pdf格式上传的.Pdf文件格式阅读性好.安全性高,本应受到大家喜爱.可是由于它本身的封闭性,无法编辑修改.当遇到内容为英文的pdf文件时,在自身英文水平不好的情况下,不知道该如何翻译文件中的内容.接下来的文字内容当中小编就和大家讲讲如何翻译pdf文件. 使用工具:迅捷PDF转换器https://www.xunjiepdf.com/converter 1.

[自制小工具分享] 快速打开 (WIN + R 增强)

我的桌面永远都是乱糟糟的, 想找个找个程序很不容易, 逗鸡眼一样的逗半天,才能找得到. 特别是工作的时候, 想打开个软件, 翻来翻去, 耽误不少时间. 我相信8成长以上的猿类都和我一样, 很多常用的工具,MB急着用的时候,就是不知道在哪个位置. 好几个同学都看我 WIN + R , 然后乱输入一气, 居然把想要的东西给打开了, 很是惊诧. 其实一点都不难, 只是修改了注册表而已. 先看今天我要显摆的东西(PS : 第一版是两年前用WINFORM 写的, 硬盘坏掉后,源码丢失了, 只留了一个EXE