我正在使用WebBrowser c#抓取网站并在向用户显示之前对其进行操作。
例如,我希望隐藏当前网站的所有按钮。
我这样做是通过注入Javascript来实现的,但是我认为这已经太晚了,因为页面已经被渲染出来了,因此,在隐藏所有按钮之前,一个轻微的闪烁(闪烁的网站显示了所有按钮)。
(显示所有按钮 - > JavaScript .ready(function(){})
注入执行 - >隐藏所有按钮)。
private void browser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string js = "$(document).ready(function() { hideButtons(); })";
script = browser1.Document.createElement("script");
script.SetAttribute("text", js);
head.AppendChild(script);
}
上面的代码:JavaScript注入。
如何解决闪烁问题(当所有按钮显示快速时刻之后,在jQuery执行后将它们全部隐藏起来)?
我试图通过将DocumentCompleted
设置为无“或”或者通过将css属性设置为OuterHtml
来操纵display:none;
方法中的DOM对象,但仍然存在这样轻微的闪烁。
private void browser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var b = browser1.Document.getElementById("btn1");
b.OuterHtml = "";
}
有没有办法在呈现给用户之前操纵DOM对象?
我打什么活动?
我唯一能想到的就是拦截导航功能,手动拉页面然后在浏览器窗口中呈现HTML。
private void browser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
//Cancel the request
e.Cancel = true;
using (WebClient client = new WebClient())
{
string html = client.DownloadString(e.Url.ToString());
//Find the text that you want to replace here and replace it
browser1.DocumentText = html;
}
}