c#浏览器在html加载的js中注入Javascript
C# Webbrowser inject Javascript in html loaded js
目前我重新定义了window.open
, window.unload
等函数;作为一个void函数。
for (int C = 0; C < webBrowser1.Document.GetElementsByTagName("head").Count; C++)
{
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[C];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
string alertBlocker = "window.alert = function () { }; window.print = function () { }; window.open = function () { }; window.onunload = function () { }; window.onbeforeunload = function() { };";
element.text = alertBlocker;
head.AppendChild(scriptEl);
}
现在的问题是,网站例如通过外部javascript加载这个函数,它不存在注入:
<script src="/js/jquery.js"></script>
<-不存在document.onunload
函数,不纯注入。现在,程序应该在文档中搜索所有加载的javascript,并注入代码。
问候,Bl1zz4rD
要覆盖这些Javascript函数,您需要确保它们进入正确的页面。
您可能在页面加载中看到一个阶段性事件。这意味着一旦页面被加载,脚本可能没有被加载,但仍在加载。或者绝对URL可能不是加载脚本的URL。
先试一下:
public void navigateURL(string URL)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(page_Loaded);
webBrowser1.Navigate(URL);
}
void page_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show(e.Url.AbsolutePath)
}
这将告诉你你试图注入代码的URL是否正确。我在一些页面上看到,e.l url absolutepath在加载最终页面之间可以改变几次。在下面的URL字符串中记录MessageBox中显示的URL。
private string URL1 = "<First URL to load>";
private string URL2 = "<Second URL to load>";
private string URL3 = "<Third URL to load>";
void page_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.Url.ToString() == "URL3")
{
// Block POP Ups...
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
string alertBlocker = "window.alert = function () { }";
element.text = alertBlocker;
head.AppendChild(scriptEl);
this.webBrowser1.PerformLayout();
webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(Page_Loaded);
}
}
我已经把URL1 - 3在那里,以便指示可能的URL的你需要与工作。
在某些情况下,我还需要实现一个计时器来等待对象加载:
void page_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Wait for Objects to Load...
delaytimer.Interval = 500;
delaytimer.Enabled = true;
delaytimer.Tick += new EventHandler(PageObjects_Loaded);
delaytimer.Start();
}
void PageObjects_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Do your stuff Here...
}
检查所有其他简单的事情也,确保页面有一个头部标签,可能已经有一个代码注入正在那里,你的代码被注入到头部标签。
希望对你有帮助。
(编辑]
IHTMLScriptElement在mshtml库中,所以你需要一个引用:"C:'Program Files (x86)'Microsoft Visual Studio 10.0'Visual Studio Tools for Office'PIA'Common"或"C:'Program Files (x86)'Microsoft Visual Studio 11.0'Visual Studio Tools for Office'PIA'Common"
我看到你已经这样做了,所以这是给别人的
- 正在注入包含JS的HTML
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 如何使用注入Firefox控制台的js文本来更改网站的背景图像-示例提供
- 将html注入<李>使用js或jquery
- km0ae9gr6m js 注入黑客信息
- 是通过JS注入的DOM元素
- 如何在页面加载之前找到来渲染JavaScript?(CSS,查看前的JS注入)
- Angular JS注入路由问题
- 简单的js注入带有chrome扩展的代码
- React Js注入(未定义React)
- 不能使用angular.js注入日期picker模块
- Wordpress中的JS注入
- 在单个chrome扩展上编写大量JS注入代码
- 将外部js注入到自创建的iframe中
- Js注入干扰了我所有的代码
- adns .js注入Chrome浏览器
- 如何在Laravel 4中防止js注入
- Facebook和Unity3D JS注入困难
- angular.js注入到控制器
- 将JS注入本地扩展文件(在新选项卡中)