评论

收藏

[C++] C#借助谷歌翻译实现翻译小工具(一)基本功能实现

编程语言 编程语言 发布于:2021-07-29 21:24 | 阅读数:526 | 评论:0

软件效果:
DSC0000.png

DSC0001.png

实现原理很简单,就是封装谷歌翻译网站:http://translate.google.cn/,一个WebBrowser“肢解”谷歌翻译网站的HtmlElement元素,删除不要的,留下需要的就是了,没什么难度
实现步骤:
一个winform窗体+一个WebBrowser控件
DSC0002.png

设置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#借助谷歌翻译实现翻译小工具(二)添加托盘图标
慎于行,敏于思!GGGGGG


关注下面的标签,发现更多相似文章