User Tools

Site Tools

prog:csharp:250310-001:index

C#: 使用 AngleSharp 在表單中輸入值並導航至頁面 (2025-03-10)

Local Backup

  • 使用C#抓取庫AngleSharp,我們將在一個html表單中輸入值,提交,然後取得轉換後的頁面內容。
  • 當您造訪需要登入身份驗證的站點,並且想要在登入後透過輸入身份驗證資訊以非互動方式從頁面中抓取並保存資訊時,能夠控製表單和頁面之間的轉換也很有用。
  • 如何安裝 AngleSharp 本身在另一篇文章中說明。

我們將要製作的程式的說明

  • 這次,我們將在 Google 搜尋頁面輸入搜尋關鍵字,並從搜尋結果頁面中抓取標題清單。
  • Google搜尋頁面的規格如下:
    • 搜尋頁面可透過「https:/www.google.co.jp/」存取
    • 搜尋頁面僅有一個form標籤,且form標籤中沒有指定id或class。
    • 搜尋頁面表單中用於輸入搜尋關鍵字的區域是以name=“q”的input標籤來提供的。
    • 搜尋結果頁的標題清單使用h3標籤標記

使用 AngleSharp 透過輸入表單來執行螢幕轉換

  • 以下項目符合上述要求:
  • button1_Click() 是點選按鈕時執行的處理程序,實際的抓取由 searchByGoogle() 方法執行。
  • using AngleSharp.Dom.Html;
    using AngleSharp.Extensions;
    
    
    private async void button1_Click( object sender, EventArgs e ) {
        var keyword = txtKeyword.Text;
    
        var titles = await searchByGoogle( keyword );
        foreach ( var title in titles ) {
            textBox1.AppendText( title + Environment.NewLine );
        }
    }
    
    
    /**
     * 在 Google 上搜尋並取得結果
     */
    private async Task<System.Collections.Generic.IEnumerable<string>> searchByGoogle(string searchKeyword) {
        // 設定
        var config = Configuration.Default.WithDefaultLoader();
        var context = BrowsingContext.New( config );
    
        // 開啟搜尋頁面
        await context.OpenAsync( "https://www.google.co.jp/" );
    
        // 搜尋指定關鍵字(測試)
        await context.Active.QuerySelector<IHtmlFormElement>( "form" ).SubmitAsync( new {
            q = searchKeyword,
        } );
    
        // 取得搜尋結果標題列表
        var tags = context.Active.QuerySelectorAll( "h3" );
        var titles = tags.Select( m => m.TextContent );
    
        return titles;
    }
  • 在searchByGoogle()中,我們先準備一個名為context的變數來管理螢幕轉換。
  • 然後,為了開啟搜尋頁面,呼叫 OpenAsync() 方法。
  • 當頁面開啟時,取得form標籤的Element,設定表單參數「q」的值並提交。這次只有一個表單,所以我們指定“form”,但如果有多個表單,也可以透過指定ID或class來取得想要的標籤,例如“form#login”。
  • 提交搜尋後,使用 QuerySelectorAll 檢索符合條件的所有標籤。取得的結果使用Linq儲存在集合中,然後傳回給呼叫者。

執行結果畫面

  • 如果你運行該程序,你將得到以下內容: 將結果與瀏覽器中的結果進行比較,我們可以看到該程式確實能夠抓取 Google 搜尋結果。

你可能還會喜歡

Permalink prog/csharp/250310-001/index.txt · Last modified: 2025/03/10 16:59 by jethro

oeffentlich