gpt4 book ai didi

c# - 在显示到 WPF WebBrowser 控件之前操作 HTML 文档

转载 作者:行者123 更新时间:2023-11-30 12:21:11 27 4
gpt4 key购买 nike

在 WebBrowser 中显示之前,我必须更改内部 html 代码。

测试页 - http://aksmod.ru/skajrim-mod-kukri-ot-aksyonov-v5-0/

我尝试使用 AngleSharp.Scripting,但它无法正常工作(广告未加载)

var config = new Configuration().WithDefaultLoader().WithJavaScript();
var document = BrowsingContext.New(config).OpenAsync(address).Result;

//do something

return document.DocumentElement.OuterHtml;

后来想到了LoadCompleted,结果还是一样

private void Wb_LoadCompleted(object sender, NavigationEventArgs e)
{
Console.WriteLine("Loaded");
string url = e.Uri.ToString();
if (!(url.StartsWith("http://") || url.StartsWith("https://")))
{ }
if (e.Uri.AbsolutePath != wb.Source.AbsolutePath)
{ }
else
{
Console.WriteLine("Full Loaded");
HTMLDocument html = (HTMLDocument)wb.Document;
var value = html.getElementsByTagName("html").item(index: 0);
//do something
wb.NavigateToString(value.OuterHtml);
}
}

事件只是没有触发(尽管它对其他一些网站工作正常)。

那么,我缺少什么来做到这一点?

更新 1

MCVE

XAML

<Grid>
<WebBrowser Name="wb" />
</Grid>

代码隐藏

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
wb.Navigated += Wb_Navigated;
wb.LoadCompleted += Wb_LoadCompleted;
wb.Navigate("http://aksmod.ru/skajrim-mod-kukri-ot-aksyonov-v5-0/");
}

private void Wb_LoadCompleted(object sender, NavigationEventArgs e)
{
Console.WriteLine("Loaded");
string url = e.Uri.ToString();
if (!(url.StartsWith("http://") || url.StartsWith("https://")))
{ }
if (e.Uri.AbsolutePath != wb.Source.AbsolutePath)
{ }
else
{
Console.WriteLine("Full Loaded");
HTMLDocument html = (HTMLDocument)wb.Document;
var value = html.getElementsByTagName("html").item(index: 0);
//do something
wb.NavigateToString(value.OuterHtml);
}
}

private void Wb_Navigated(object sender, NavigationEventArgs e)
{

FieldInfo fiComWebBrowser = typeof(WebBrowser)
.GetField("_axIWebBrowser2",
BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return;
object objComWebBrowser = fiComWebBrowser.GetValue(wb);
if (objComWebBrowser == null) return;
objComWebBrowser.GetType().InvokeMember(
"Silent", BindingFlags.SetProperty, null, objComWebBrowser,
new object[] { true });

Console.WriteLine("Navigated");
}
}

最佳答案

广告作为 iFrame 嵌入到您呈现的页面中。在我的例子中,加载到 iFrame 中的广告 URL 类似于 https://cdn.254a.com/images/hosted/elv/retargeting/v5/728x90.html。 ?...(使用网络浏览器的检查器工具检查)

可能广告不允许在您的页面中使用 iframing(检查广告在 X-Frame-Options header 字段中返回的内容)。如果这是问题所在,应该可以为广告实现代理,并让代理更改 X-Frame-Options header 。

在这种情况下,如果广告网址是 https(而不仅仅是 http),您需要创建一个充当中间人的代理。查看 What's the point of the X-Frame-Options header? 的已接受答案.但是您可以使用 ARGS 中的原始 URL 将 URL 替换为您的代理 URL。代理充当 HTTPS 客户端,获取内容,代理能够修改 header ,并通过 HTTP 将内容返回到您的页面。

关于c# - 在显示到 WPF WebBrowser 控件之前操作 HTML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com