Manipulating an HTML document before displaying it in a WPF WebBrowser control

I need to modify the internal HTML before showing it in WebBrowser.

Testing page - http://aksmod.ru/skajrim-mod-kukri-ot-aksyonov-v5-0/

I tried using AngleSharp.Scripting, but it does not work correctly (ads do not load)

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

//do something 

return document.DocumentElement.OuterHtml;

later I thought about LoadCompleted, but the result was the same

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);
    }
}

the event just doesn't fire (it works great for some other sites, though).

So what am I missing to do this?

Update 1

Mcve

Xaml

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

Code for

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");
    }
}
+4
source share
2 answers

iFrame , . URL- , iFrame, https://cdn.254a.com/images/hosted/elv/retargeting/v5/728x90.html?... ( -)

, iframing (, X-Frame-Options). , , X-Frame-Options.

, URL- - https ( http), -, " ". . X-Frame-Options?. URL URL- , URL- ARGS. HTTPS, , - HTTP.

+3

Source: https://habr.com/ru/post/1687152/


All Articles