C# - 通过控制台应用程序访问 Javascript 修改的 HTML

C# - Accessing Javascript modified HTML via a Console app

本文关键字:Javascript 修改 HTML 访问 应用程序 控制台      更新时间:2023-09-26

我正在尝试访问页面的HTML,因为它被页面上的JavaScript修改了。 这是我目前根据我在网上找到的内容一直在尝试的。

using System; 
using System.Windows.Forms;
using System.IO; 
namespace WebBrowserDemo 
{ 
    class Program 
    {
    public const string TestUrl = @"http://www.theverge.com/2012/7/2/3126604/android-jelly-bean-updates-htc-samsung-google-pdk"; 
    [STAThread] 
    static void Main(string[] args) 
    { 
        WebBrowser wb = new WebBrowser(); 
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); 
        wb.Navigate(TestUrl); 
        while (wb.ReadyState != WebBrowserReadyState.Complete) 
        { 
            Application.DoEvents(); 
        } 
        Console.WriteLine("'nPress any key to continue..."); 
        Console.ReadKey(true); 
    } 
    static void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
        WebBrowser wb = (WebBrowser)sender; 
        HtmlElement document = wb.Document.GetElementsByTagName("html")[0];
        using (StreamWriter sw = new StreamWriter("OuterHTML.txt"))
        {
            sw.WriteLine(document.OuterHtml);
        }
        var abc = wb.Document.InvokeScript("eval", new object[] { "window.scrollTo(0, document.body.scrollHeight);" });
        Console.WriteLine();
        document = wb.Document.GetElementsByTagName("html")[0];
        using (StreamWriter sw = new StreamWriter("OuterHTML2.txt"))
        {
            sw.WriteLine(document.OuterHtml);
        }
    } 
} 
} 

最终目标是滚动到页面底部,激活任何JS以加载对文章的评论。尽管目前我在脚本运行之前和之后返回的html是相同的。

有什么建议吗?

谢谢

您应该使用 WebBrowser 控件执行此操作。

这基本上是IE的组件化版本。 将页面加载到控件中。 您甚至可能不需要显示页面。 可以注册将在页面完全加载时调用的事件处理程序。 没有确定脚本何时"完成"的方法 - 脚本是开放式的,可以运行任意长的时间。 因此,您必须构建一个启发式的"等待期",然后在等待期过后检查 HTML。

顺便说一下,这正是IECapt所做的。