実現したいこと・前提
WinUI3でアプリを作っています。
関西電力のhttps://www.kansai-td.co.jp/denkiyoho/area-performance.htmlのサイトの内容を取得して、そこからどのようなCSVファイルをダウンロードできるか調べられる仕組みを作ろうとしています(現在の場合は、2016年度から2023年度の4から5月のCSVファイルがあると知れればいい)。
発生している問題
以下のようなプログラムでサイトの内容を取得しています。
C#
1using (var client = new HttpClient()) 2 { 3 content = await client.GetStringAsync("https://www.kansai-td.co.jp/denkiyoho/area-performance.html"); 4 }
しかし、contentの内容をみてもブラウザのデベロッパーツールで見ると
html
1<ul class="list_dot" id="jisseki_data_list"> 2 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2016.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2016年度[<span class="filesize_auto">493.37KB</span>]</a></li> 3 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2017.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2017年度[<span class="filesize_auto">514.76KB</span>]</a></li> 4 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2018.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2018年度[<span class="filesize_auto">518.64KB</span>]</a></li> 5 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2019.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2019年度[<span class="filesize_auto">525.01KB</span>]</a></li> 6 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2020.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2020年度[<span class="filesize_auto">516.50KB</span>]</a></li> 7 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2021.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2021年度[<span class="filesize_auto">523.25KB</span>]</a></li> 8 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2022.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2022年度[<span class="filesize_auto">527.78KB</span>]</a></li> 9 <li class="list"><a href="/denkiyoho/csv/area_jyukyu_jisseki_2023.csv" class="link_csv" target="_blank" rel="noopener noreferrer">2023年度(4月~5月)[<span class="filesize_auto">89.07KB</span>]</a></li> 10</ul>
となっている部分が、
html
1<ul class="list_dot" id="jisseki_data_list"> 2</ul>
となっていて必要なところが丸々抜けていました。
試したこと
C#のWebClientを使ったり、AngleSharpを使って
C#
1//using AngleSharp; 2//using AngleSharp.Dom; 3 4var config = Configuration.Default.WithJs().WithDefaultLoader(); 5var context = BrowsingContext.New(config); 6var document = await context.OpenAsync("https://www.kansai-td.co.jp/denkiyoho/area-performance.html"); 7content = document.ToHtml();
のような風にも試してみましたが変わりませんでした。
Seleniumを使って
C#
1//using OpenQA.Selenium.Chrome; 2 3using (var driverService = ChromeDriverService.CreateDefaultService()) 4{ 5 driverService.HideCommandPromptWindow = true; 6 7 using (var driver = new ChromeDriver(driverService, options)) 8 { 9 driver.Url = "https://www.kansai-td.co.jp/denkiyoho/area-performance.html"; 10 driver.Navigate(); 11 content = driver.PageSource; 12 } 13}
のようにすると期待通りに取得はできるのですが、処理にコマンドプロントのような画面が開かれるといった動作があり、処理終了まで数秒の時間がかかってしまいます。これだと実用的ではないと感じました。
どのような方法をとればある程度素素早く、期待するものを取得できるのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。