主题仍是下载相关。

页面加载完成后,注入html元素,以使能够与主程序交互。并使WebBrowser与js交互,可以实现一些有趣的功能。

欲使WebBrowser与js交互,其所在页面类,须加上[ComVisible(true)]标记。

记录嵌入代码如下:

    [ComVisible(true)]
public partial class Main : Form
{
public Main()
{
InitializeComponent(); browser.ObjectForScripting = this;
} private void txtUrl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
btnGo.PerformClick();
} private void btnGo_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtUrl.Text))
browser.Navigate(txtUrl.Text);
} public void ShowURL(string url)
{
MessageBox.Show("OK, Url from website is:\r\n" + url, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
} private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (browser.ReadyState == WebBrowserReadyState.Complete && e.Url == browser.Url)
{
//html注入
var emt = browser.Document.GetElementById("movie_player"); //"watch-header");
if (emt != null)
{
Console.WriteLine("Yeah!");
//https://www.youtube.com/watch?v=vvppaufeD3Q
string style = "width:80px; height:24px; background-color:#99b4d1; float:right; text-align:center; line-height:24px;";
string imgData = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFpSURBVDhPxZO9SgNBFIVHG9dOrNbGmEawEOxtrCVNhARjp5XYiyCIiOATBPEJjCRgEPQR/CkFQSWNdgo2FpH9m5n13pnrktndTFQEPzicOzN3zy67d4dYfxzQGHkvPuidPIMt0AXNkffyCrolz2ALnJpfP3yi2uDyaKMI9qxX3wcD44v7wBDu4ZluyTJM3pduIAwNwhoopWTdULKPQDtKSnuoNVDAxVHIWRhx5SghJJ3mkw7EEcGviu/IlVxAWGRICvWESQ/IGKt0IM4djsoCOhcR8wNTnEfYl/SA8JqE9Ni4s7WDF6oV1eUVqjTNk2OqNHeN7QmwZCbTgc5MZc8rV2q0tNNuNdhDa3cUyuSvyRtsZ7q845WWqrTM5/y0yTrtfSMMyfvKPjaewd0L4yPM80Pm+/D+lIdsEvbwLC9sEE6xtBVfPb7Fq/WbeK1+rWrcwzPd8nOcwuJm/AXWuKePfo8K/auw/4axTyIVwEXfJXZCAAAAAElFTkSuQmCC";
emt.OuterHtml = emt.OuterHtml + "\r\n<div onmouseover=\"this.style.backgroundColor='#799cc4'\" onmouseout=\"this.style.backgroundColor='#99b4d1'\" style=\"" + style + "\"><a onclick=\"window.external.ShowURL(location.href);return false;\"><img src=" + imgData+ " align=\"center\" />Click Me!</a></div>"; //用下面方法,在有些网站上,其js不能被执行,而上面追加OuterHtml可以
//var ne = browser.Document.CreateElement("div");
//ne.SetAttribute("style", style);
//ne.InnerHtml = "<div style=\"" + style + "\"><a onclick=\"window.external.ShowURL(location.href);return false;\"><img src=" + imgData + " align=\"center\" />Click Me!</a></div>";
//emt.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterEnd, ne);
}
}
}

效果如图:

颇是有点意思!

而WebBrowser没有Document所用的getElementsByClassName方法,以c#之扩展方法实现之,更为易用:

public static class ClassHelper
{
public static List<HtmlElement> GetElementsByClassName(this HtmlDocument doc, string className)
{
var result = new List<HtmlElement>();
foreach (HtmlElement emt in doc.All)
{
if (emt.GetAttribute("className") == className)
result.Add(emt);
} return result;
}
}

参考:

C#中webbrowser与javascript(js)交互的方法 - DragonDean - 博客园

c#: WebBrowser控件html代码注入及交互的更多相关文章

  1. webbrowser 控件实现WinForm与WebForm交互

    WebBrowser 控件可以让你装载Windows Form 应用程序中的 Web 网页和其它采用浏览器的文件.可以使用webbrowser 控件将现有的web框架控制项加入至 Windows Fo ...

  2. WPF的webBrowser控件关键代码

    1.根据元素ID获取元素的值. 比如要获取<img class="" id="regimg" src="/register/checkregco ...

  3. 009. C#中的WebBrowser控件的属性、方法及操作演示代码(转)

    本文转自 http://www.open-open.com/code/view/1430559996802 0.常用方法 Navigate(string urlString):浏览urlString表 ...

  4. winform WebBrowser控件中,cs后台代码执行动态生成的js

    很多文章都是好介绍C# 后台cs和js如何交互,cs调用js方法(js方法必须是页面上存在的,已经定义好的),js调用cs方法, 但如果想用cs里面执行动态生成的js代码,如何实现呢? 思路大致是这样 ...

  5. C#中的WebBrowser控件的使用

    0.常用方法   Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(st ...

  6. delphi WebBrowser控件上网页验证码图片识别教程(一)

    步骤一:获取网页中验证码图片的url地址 在delphi中加入一个BitBtn和一个memo以及WebBrowser控件实现网页中验证码图片的url地址的获取 程序如下:procedure TForm ...

  7. <总结>delphi WebBrowser控件的使用中出现的bug

    Delphi WebBrowser控件的使用中出现的bug:  1.WebBrowser.Visible=false:Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowse ...

  8. C# WebBrowser控件使用教程与技巧收集

    常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(strin ...

  9. C# webBrowser控件使用

    C# webBrowser控件使用心得 最近用到WebBrowser控件,遇到很多问题,也学习了不少新的东西.下面是我在C#下写的关于WebBrowser控件使用的代码. 1.WebBrowser常用 ...

随机推荐

  1. vim编辑Makefile如何使用Tab

    因为用vim编辑代码设置了Tab键为4个空格,但有时候我们需要编写Makefile,必须使用Tab,同时也不想设置set noexpandtab. 其实可以先Ctrl_v组合键,再按Tab键盘,这样我 ...

  2. 【mongodb】如何在mac上安装mongoDB

    1.登入MongoDB的官网 选择发布的版本 网址:https://www.mongodb.com/download-center/community 2.下载tgz的包,解压缩 3.打开终端,配置环 ...

  3. day04-Python的流程控制

  4. R随机森林交叉验证 + 进度条

    library(data.table) library(randomForest) data <- iris str(data) #交叉验证,使用rf预测sepal.length k = 5 d ...

  5. C# Windows Service 基础

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  6. ByteToByte64String、Base64StringToBytes

    public string ByteToByte64String(byte[] bytes) { return Convert.ToBase64String(bytes); } public byte ...

  7. jenkins中如何实现执行脚本时的变量共享

    1.主要是利用EnvInject Plugin插件,所以要首先安装插件,安装好后如下图: 2.然后在“增加构建步骤”中,插入一个“Execute Python script” 代码我用的python3 ...

  8. Android Dialog.dismiss()与Activity.finish()顺序

    activity.finish() 和dialog.show() 同时调用的时候, 需要先调用dialog.dismiss() 后activity.finish() 如果先直接finish()后,再触 ...

  9. Spark 性能调优-内存设置-GC设置

    http://mt.sohu.com/20150604/n414449770.shtml http://my.oschina.net/mkh/blog/330386 http://itindex.ne ...

  10. 对pytorch中Tensor的剖析

    不是python层面Tensor的剖析,是C层面的剖析. 看pytorch下lib库中的TH好一阵子了,TH也是torch7下面的一个重要的库. 可以在torch的github上看到相关文档.看了半天 ...