DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomal全角シフト中にアクセスキーが効かない(5) | NomalDataAdapter.Updateで構文エラー(6) | Nomal抽象クラスで実装したクラスの情報を知る(3) | Nomal画面遷移(モーダルとモードレス)(2) | NomalProcessクラスからbatファイル実行後、KILLできない(2) | NomalGetDirectoriesでルートを指定するとエラーになる(3) | Nomal兆億万表記の文字列を数値に変換できる?(3) | NomalLinqにおける明示的型指定の方法(3) | Nomal2つのradの数値から1つの角度を求めるコードを改善できますか?(C++)(2) | Nomalコンソールアプリで、WebView2の利用(2) | NomalEntity Frameworkは、使えるか?(2) | Nomalデータベースからのテーブル名一覧の効率的な取得方法(3) | NomalC#のlong型でオーバーフローになる(2) | Nomal正規表現のパターン表記方法(2) | NomalWebView2によるスクレ―ピング(4) | Nomalこういた物を作れますか?(2) | Nomalツールボックスにtableadapterが表示されない(1) | NomalC# Chart X軸上のグラフ表示(3) | NomalVB.NETでBluetoothデバイスの電池残量を取得する方法(3) | Nomalクリスタルレポート 明細部のサブレポート(0) | Nomal重なったPictureBox同士を透過する方法(7) | NomalWindowsフォームデザイナについて(3) | Nomalvb.netでExcelファイル操作(7) | NomalVB.NETからcmdでpingを実行した時の結果(5) | Nomalvb.netでのExcelファイルそうさ(2) | Nomalキーボード+バーコードでキーボード入力を無効にしたい(6) | NomalVB2022でクリスタルレポートが開けない(2) | Nomalファイルとして配置したマニフェストを優先したい(2) | NomalTabPageの背景色(5) | NomalC#でJpeg圧縮のTiffファイルを作成したい(4) | Nomalエクセルのみ監視ができない(2) | NomalDataGridViewのVirtualModeを有効した場合の実装方法(4) | NomalExcelの数値 -> 日付みたいな関数?(2) | Nomaljumbo icon(256x256)が存在するか知る方法(6) | NomalDrawstringでの透過文字作成(3) | NomalSpinWait()を使う理由(2) | Nomalantecedentってなんですか?(2) | Nomalワンタイムパスワードのサイトに自動ログインしてアクセストークンを得る(3) | Nomalstyle.displayだと効率悪いから違うやり方をしたいです。(5) | Nomalテーブルを順番通りに直すプログラムを外部で読み込めるようにしたいです。(4) | NomalJSONの複雑な入れ子内部の値を取りたい。(3) | Nomalグリッド表示レコードをJSONに変換(5) | Nomalシステム時計の設定(3) | NomalSeleniumで開いているページのTableを編集したい(5) | Nomalソケット通信入門 ひらがな(4) | NomalVisual Basicでエラーが出る(3) | Nomalインストーラにて、ローミングフォルダにファイルを配置したい(0) | NomalRGB値の所得(2) | Nomal時間変数(文字列)の扱い(4) | NomalVB.net からAccessDBへの接続(2) | Nomal画像のスクロール(6) | Nomalタイマーの一括処理(6) | NomalTreeViewとDataGridViewのスクロールを同期(シンクロ)させたい(4) | NomalTreeViewの現在位置とDataGridViewの現在位置を合わせたい(7) | NomalPictureBoxの画像を連続保存(11) | NomalDataGridViewの特定セルにボタンを配置する方法(5) | Nomalフォームのリサイズ時にDataGridViewが再描画されない(4) | NomalテキストボックスのValidatingイベントよりも先に発生するボタン発生イベントは何でしょう?(2) | NomalPDFをフォーム上で表示させる方法につきまして(4) | NomalDataGridViewの行ヘッダーに行番号を表示した時のエラー(4) | Nomal継承元フォームで各フォームのボタン動作を検知したい(3) | Nomalラジオボタンの一括設定(7) | NomalWindowsエクスプローラからのドラッグ&ドロップ(2) | NomalRichTextBoxのテキストをpictureBOXへ(12) | Nomalクリックイベントでexeを作成できるか(2) | Nomal作成した白黒画像をWordに貼り付けてから「図として保存」(8) | Nomalアセンブリ情報が載らない(1) | Nomal先頭に空白(スペース)があるファイルを読み込んでRichTextBoxへ書き出すとスペースが削除える(6) | Nomalc#で日付型の定義の仕方で質問があります。(2) | NomalExcel Com オブジェクトの増殖(13) | Nomal二次元マップから値の取得(1) | NomalアプリでHDMIへ出す解像度を変えたい(4) | Nomal列車の時間ごとの位置情報を表示したいです。(2) | Nomal画像の中心を基点に回転(4) | NomalDataGridViewのドロップダウンリストの表示と選択後の値を分けたい(1) | NomalVB.NetでVB6.0と同じFontを指定しても同様に印刷されない(9) | NomalタッチキーボードでIMEを自動で切替えたい(6) | NomalVSTOによるエクセルアドインのインストーラーでのアップデート(1) | NomalMP4動画を再生する方法について(5) | NomalUrlにアクセスするとダウンロードされるファイルを捕まえる(2) | NomalLableのカラー色を文字変数から変更したい(5) | NomalLabelで文字単位の背景色(7) | NomalTEXTBOXのプロパティを文字列に(7) | Nomalタブレット等でスワイプによるスクロールを実装(2) | NomalPDFをフォーム上で表示させる方法につきまして(6) | NomalChart X軸上の描画を切り替えたい(0) | NomalRichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い(3) | Nomal特定のPCだけ発生する「パディングは無効なので削除できません」のエラーの原因(6) | NomalASP.NET WebApi内でXmlReader.Create(url)がタイムアウトする(4) | NomalDatagridViewでファンクションキーを止めたい(5) | Nomal表示動作が重くなる(3) | Nomalbitmapを複数スレッドで処理したい(2) | NomalLoadOptionのパラメータの意味(3) | Nomalフォーム背景のみを半透明にしたい(5) | Nomal読み出し元フォームの位置取得方法(2) | Nomalコンストラクターに続く{}の意味(2) | Nomal1行で書くことできますか?(3) | NomalCommandBuilderによって作られるCommandTextの内容(5) | Nomalvb.netで7zの圧縮・解凍をしたい。(2) |



■記事リスト / ▼下のスレッド
■35550 / 親記事)  Entity Frameworkは、使えるか?
□投稿者/ Wan 付き人(89回)-(2023/11/23(Thu) 20:05:48)
  • アイコン環境/言語:[Core] 
    分類:[.NET] 

    さすがに、限界を感じ、VB→C#、WebClient→WebView2、ACCESS→SQL Server、Framewark→Coreに移行を始めました!
    Entity Frameworkへの挑戦もやるべきでしょうか?
    遅くなるって、ネットで見たのですが?個人レベルでは、余り問題にならないかな?
    って思っています。お勧めのサイトなどありますでしょうか?


違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35551 / ResNo.1)  Re[1]: Entity Frameworkは、使えるか?
□投稿者/ shu 大御所(504回)-(2023/11/24(Fri) 07:30:54)
  • アイコン何をするのかにもよると思いますが

    WebClient→WebView2
    ACCESS→SQL Server
    Framewark→Core(.NET6以降)

    だけでよいと思います。
違反を報告
引用返信
■35552 / ResNo.2)  Re[2]: Entity Frameworkは、使えるか?
□投稿者/ Wan 付き人(90回)-(2023/11/24(Fri) 12:00:07)
  • アイコンshu 様
    御指南ありがとうございます。

    御指南通り、余り、手を広げずに、基礎力を高めたいと思います。
    ありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35546 / 親記事)  データベースからのテーブル名一覧の効率的な取得方法
□投稿者/ Wan 付き人(86回)-(2023/11/21(Tue) 10:22:38)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic Framework4.7.2] 
    分類:[.NET] 

    あるデータベースのテーブル名一覧をList<String>で返す関数を作りました。
    一応、目的通りに動いているのですが、なんとなく?もっと、効率のいい方法があるような気がしていますが、まったく思いつきません。
    ベテランの方のアドバイスを頂ければ幸いに存じます。
    宜しくお願い致します。
    
    Private Function GetTableNames(con As SqlConnection) As List(Of String)
         Dim dtTableNames As New DataTable
    Dim Da As New SqlDataAdapter
         Dim SqlGetTableNames As String = "select name from sys.tables;"
         Dim cmd As New SqlCommand(SqlGetTableNames, con)
         Da.SelectCommand = cmd
         Da.Fill(dtTableNames)
         Dim query = From order In dtTableNames.AsEnumerable
                     Select order.Field(Of String)("name")
         Dim tableNameList As List(Of String) = query.AsEnumerable.ToList
         Return tableNameList
     End Function
    
    

違反を報告
引用返信

▽[全レス3件(ResNo.1-3 表示)]
■35547 / ResNo.1)  Re[1]: データベースからのテーブル名一覧の効率的な取得方法
□投稿者/ 魔界の仮面弁士 大御所(1567回)-(2023/11/21(Tue) 13:32:04)
  • アイコンNo35546に返信(Wanさんの記事)
    > あるデータベースのテーブル名一覧をList<String>で返す関数を作りました。

    SqlCommand なので、あるデータベースとは「SQL Server」ですね。
    sys.tables は対 SQL Server に対してしか使えませんが、
    手法としては特に問題無いと思いますよ。


    データベースへの依存度を減らした汎用的な方法としては、
    OLE DB Provider に対してスキーマを問い合わせる手法があります。

    'tbl = con.GetSchema("MetaDataCollections")
    'tbl = con.GetSchema("Databases")
    tbl = con.GetSchema("Tables")
    'tbl = con.GetSchema("Columns")
    'tbl = con.GetSchema("IndexColumns")
    など。
    ADODB の場合は OpenSchema メソッドで同じことができます。


    > なんとなく?もっと、効率のいい方法があるような気がしていますが、まったく思いつきません。
    実行効率面では、DataAdapter.Fill を使うよりは、ExecuteReader の方が良いですね。
違反を報告
引用返信
■35548 / ResNo.2)  Re[2]: データベースからのテーブル名一覧の効率的な取得方法
□投稿者/ Wan 付き人(87回)-(2023/11/22(Wed) 14:30:50)
  • アイコン魔界の仮面弁士
    いつも御指南ありがとうございます。

    凄く、不安だったのですが、太鼓判を押して頂けたようで安心しました。

    加えて、教えて頂いたことは、引き続き熟読して、マスターしていきたいと思います。

    ありがとうございました。

違反を報告
引用返信
■35549 / ResNo.3)  Re[3]: データベースからのテーブル名一覧の効率的な取得方法
□投稿者/ Wan 付き人(88回)-(2023/11/22(Wed) 14:31:16)
  • アイコン解決済みです。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-3]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35543 / 親記事)  C#のlong型でオーバーフローになる
□投稿者/ つき 一般人(1回)-(2023/11/20(Mon) 11:56:18)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    初歩的なことだと思いますが、数値型変数の扱いについて質問です
    long型の変数ansに数値や計算式を入れた場合にこうなります

    @正常
     long ans;
    ans = 2500000000; ・・・正常

    Aエラーケース
     long ans;
     ans = 50000 * 50000; ・・・50000と入力した時点でオーバーフローになります。

    どちらもlong型の範囲内(-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807)なので大丈夫では
    と思うのですが、なぜオーバーフローになるのでしょう?
    どなたがご教授お願いします!

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35544 / ResNo.1)  Re[1]: C#のlong型でオーバーフローになる
□投稿者/ Hongliang 大御所(648回)-(2023/11/20(Mon) 12:19:23)
  • アイコン>  ans = 50000 * 50000; ・・・50000と入力した時点でオーバーフローになります。
    1. C#において、接尾辞のない整数値は、intとして扱われます。
    2. int同士の演算はintを返します。
    この仕様のため、50000 * 50000はintで計算され、intの上限である約21億を超える25億となってオーバーフローになります。

    接尾辞Lを付けるとかします。
    ans = 50000L * 50000;
    // 1つ目の50000はlong型になり、long * intはlong型を返します。

    50000が変数なら、明示的にキャストするという方法もあります。
    int x = 50000;
    ans = (long)x * x;
違反を報告
引用返信
■35545 / ResNo.2)  Re[2]: C#のlong型でオーバーフローになる
□投稿者/ つき 一般人(3回)-(2023/11/20(Mon) 13:15:53)
  • アイコンHongliangさん
    わかりやすい解説ありがとうございました。

    > 1. C#において、接尾辞のない整数値は、intとして扱われます。
    > 2. int同士の演算はintを返します。

    このこと、全然知らずにやってました。
    原因がわかって助かりました。
    これからは変数の特性にも気を付けていこうと思います。

    ありがとうございました。
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■35540 / 親記事)  正規表現のパターン表記方法
□投稿者/ Wan 付き人(84回)-(2023/11/14(Tue) 10:29:12)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic Framework4.7.2] 
    分類:[.NET] 

    正規表現にチャレンジしようと始めましたが、行き成り躓きました。
    毎日値が変わる「2023/11/10」の部分にヒットさせようと頑張りましたが、何も表示されません。
    どなたか?詳しい方いらっしゃいましたら、助けて下さい。

    Dim testStr = "全 2,003件中 1件から 30件 (計算日付:2023/11/10)"
    Dim testMatch = Regex.Match(testStr, Regex.Escape(".*[0-9]{4}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01]).*"))
    Debug.Print(testMatch.Value)

    色々試しましたが、とほほです。
    ^(?=.*[0-9]{4}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01]).*$

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■35541 / ResNo.1)  Re[1]: 正規表現のパターン表記方法
□投稿者/ Hongliang 大御所(647回)-(2023/11/14(Tue) 11:31:12)
  • アイコンマッチさせるだけなら .* とかいらないわけなので、そこにマッチさせたうえで何か他の要求があるのではないかと思うのですが。
    とりあえず、Regex.Escape()は、そのままだと特殊文字扱いされる文字をそのままマッチさせる文字に変換するためのメソッドです。
    Regex.IsMatch("123", "[0-9]+") ' True
    Regex.IsMatch("123", Regex.Escape("[0-9]+")) ' False
    おそらく求めているものとは異なります。
違反を報告
引用返信
■35542 / ResNo.2)  Re[2]: 正規表現のパターン表記方法
□投稿者/ Wan 付き人(85回)-(2023/11/14(Tue) 11:57:12)
  • アイコンHongliang様
    いつも大変お世話になっております。

    教えて頂いた内容でできました。
    ありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▲上のスレッド
■35535 / 親記事)  WebView2によるスクレ―ピング
□投稿者/ Wan 付き人(81回)-(2023/11/10(Fri) 17:06:14)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic Framework4.7.2] 
    分類:[.NET] 

    WebView2を使って、スクレ―ピングを考えています。クラス名でTableを抽出しtrとtdで構成された表をJavaScriptで二次元配列に代入し、returnで返してたつもりです。が、DataTableの変数で受け取れません。途方に暮れています。どなたか?詳しい方いらっしゃいましたら教えて頂けないでしょうか?
    スクレ―ピングについては、複数ページに渡るので、WebView2_NavigationCompletedが発生するたびに、DataTableに追加し続けるコードにしたいのが最終目標です。

    Dim DataTable_Scraping As New DataTable
    DataGridView1.DataSource = DataTable_Scraping

    Private Async Sub WebView2_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles WebView21.NavigationCompleted
    Dim js As New System.Text.StringBuilder
    js.AppendLine("const hyou=[];let i=0;")
    js.AppendLine("var TrElems = document.getElementsByClassName('Tableが含まれるクラス名')[0].getElementsByTagName('tr');")
    js.AppendLine("Array.prototype.forEach.call(TrElems, function(TrElem) {")
    js.AppendLine(" hyou.push([]);")
    js.AppendLine(" var TdElems = TrElem.getElementsByTagName('td');")
    js.AppendLine(" Array.prototype.forEach.call(TdElems, function(TdElem) {")
    js.AppendLine(" hyou[i].push(TdElem.textContent);")
    js.AppendLine(" });")
    js.AppendLine(" i=i+1;")
    js.AppendLine("});")
    js.AppendLine("return hyou;")

    DataTable_Scraping = Await WebView21.ExecuteScriptAsync(js.ToString())
    '読み込み結果を判定
    If e.IsSuccess Then
         ‘ここで次のページへの移動用の要素をクリックしている。動作確認済み
         ‘getElementsByClassName('****')の要素数が1の場合は、終わり
    Await WebView21.ExecuteScriptAsync(
    "document.getElementsByClassName('****')[1].getElementsByTagName('a')[0].click();")
    Else
    Console.WriteLine(e.WebErrorStatus)
    End If
    End Sub

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■35536 / ResNo.1)  Re[1]: WebView2によるスクレ―ピング
□投稿者/ Wan 付き人(82回)-(2023/11/10(Fri) 17:16:18)
  • アイコン追伸

    return hyou;の部分を
    console.table(hyou)とすると
    Edgeの開発者ツール-コンソールで動かして表として表示されますので、
    JavaScript上では、表形式になっているようです。

    また、varをletやconstに変えると、Edgeのコンソール上でも、上手く動かない理由も教えて頂ければ幸いです。



違反を報告
引用返信
■35537 / ResNo.2)  Re[2]: WebView2によるスクレ―ピング
□投稿者/ Hongliang 大御所(646回)-(2023/11/11(Sat) 18:36:02)
  • アイコンVisual Studio 2015から複数行リテラルを扱えるようになったので、文字列が固定であれば変にStringBuilder使うよりリテラルで書いた方が見やすいしパフォーマンスも良いです。

    ExecuteScryptAsyncで実行されるスクリプトは、最後の式を評価してそれを返値とするような挙動になります。
    なので、変数hyouの内容を返値としたいのであれば、単に変数を記述します。
    × return hyou;
    ○ hyou;
    あるいは、以下のように無名関数の呼び出しに全体を変換する方法もあります。
    js = "(function() {
    const hyou = [];
    色々処理する;
    return hyou; })()"

    https://learn.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2.executescriptasync?view=webview2-dotnet-1.0.2088.41
    ExecuteScriptAsyncの返値(Await結果)は文字列、String型です。
    当然ながらDataTable型の変数に直接代入することはできません。
    この文字列はスクリプトの結果をJSON.stringify()したJSON形式なので、一般的にはデシリアライズして.NET上のオブジェクトとして扱います。
    JSONのデシリアライザとしては、System.Text.JsonでもJson.NETでもお好みのものを使えばいいでしょう。.NET 4.xで組み込みなのはDataContractJsonSerializerというのがありましたっけ。
    ざっと見た様子では、JavaScript上では「「文字列の配列」の配列」のようなので、VB上ではString型の配列の配列、つまり String()() 型としてデシリアライズできます。
    DataTableへはこのString()()から手動で移し替えてください。

    > また、varをletやconstに変えると、Edgeのコンソール上でも、上手く動かない理由も教えて頂ければ幸いです。
    ExecuteScriptAsycで渡したJavaScript内で定義したりした変数はそのまま残ります。
    constやletで宣言した変数は再宣言不可能なので、もう一度ExecuteScriptAsyncしたりするとエラーになります。
    ちなみにconstにせよletにせよブロックスコープなので、上の方で示した無名関数を使う場合、
    (function() { const hyou = []; ... })()
    このhyouはこの無名関数内でのみ有効なので、再度呼び出しても問題ありません。

    何度も使用するJavaScript関数なら、
    CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync
    で登録しておけば便利です。
違反を報告
引用返信
■35538 / ResNo.3)  Re[1]: WebView2によるスクレ―ピング
□投稿者/ 魔界の仮面弁士 大御所(1566回)-(2023/11/11(Sat) 22:04:19)
  • アイコン
    No35535に返信(Wanさんの記事)
    > スクレ―ピング
    「スクレーピング」が
    「スクレ―ピング」になっていて
    似非日本語感を微妙に覚えるなど(
    
    
    > WebView2を使って、スクレ―ピングを考えています。
    RSS をクロールするだけでで要件を満たせるなら、
    XDocument だけで簡単に済むのですけれどね…。
    ひとまず、ここの掲示板の RSS を拾ってみた例。
    
    
    Imports System.Xml.Linq
    Public Class Form1
        Private WithEvents dgv As DataGridView
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            dgv = New DataGridView() With {.Dock = DockStyle.Fill, .ReadOnly = True, .AllowUserToAddRows = False}
            Controls.Add(dgv)
            Dim doc = XDocument.Load("https://dobon.net/cgi-bin/vbbbs/rss.cgi?ver=2.0")
            Dim items = From item In doc...<item>
                        Select item.<title>.Value,
                            item.<link>.Value,
                            pubDate = Date.Parse(item.<pubDate>.Value),
                            item.<description>.Value
            dgv.DataSource = items.ToArray()
        End Sub
    End Class
    
    
    こちらは、Web ページからスクレイピングする場合。
    
    Imports Microsoft.Web.WebView2.Core
    Imports Microsoft.Web.WebView2.WinForms
    Public Class Form1
        Private WithEvents wv As WebView2
        Private WithEvents ds As DataSet
        Private WithEvents tbl As DataTable
        Private WithEvents dgv As DataGridView
    
        Private Async Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            ds = New DataSet()
            tbl = ds.Tables.Add("dobon")
            wv = New WebView2 With {.Visible = False}
            dgv = New DataGridView() With {.Dock = DockStyle.Fill, .ReadOnly = True, .AllowUserToAddRows = False}
            dgv.DataSource = tbl
    
            tbl.PrimaryKey = New DataColumn() {tbl.Columns.Add("Id", GetType(Integer))}
            tbl.Columns.Add("Solved", GetType(Boolean)).DefaultValue = False
            tbl.Columns.Add("Title")
            tbl.Columns.Add("Category")
            tbl.Columns.Add("FirstAuthor")
            tbl.Columns.Add("FirstPostAt")
            tbl.Columns.Add("LastAuthor")
            tbl.Columns.Add("LastPostAt")
            Controls.AddRange(New Control() {dgv, wv})
    
            Await wv.EnsureCoreWebView2Async()
            'wv.CoreWebView2.Navigate("https://dobon.net/cgi-bin/vbbbs/rss.cgi?ver=2.0")
            wv.CoreWebView2.Navigate("https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?H=F&no=0")
        End Sub
        Private Async Sub wv_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles wv.NavigationCompleted
            Dim js = "(()=>{
                const table=[];
                document.querySelectorAll('TABLE.topiclist').forEach(t=>{
                    [...t.rows].slice(1).forEach(tr=>{
                        const cols=[...tr.cells];
                        const d=[];
                        d[0]=cols[1].querySelector('small>font').innerText.substr(1)*1;
                        d[1]=cols[6].innerText.includes('済');
                        d[2]=cols[1].firstChild.innerText;
                        d[3]=cols[0].innerText;
                        d[4]=cols[3].innerText;
                        d[5]=cols[1].querySelector('small').lastChild.substringData(5,16);
                        d[6]=cols[4].innerText
                        d[7]=cols[5].innerText;
                        table.push(d);
                    });
                });
                return table;
            })();"
    
            Dim result = Await wv.CoreWebView2.ExecuteScriptAsync(js)
            Dim ary = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object()())(result)
            ds.EnforceConstraints = False
            Array.ForEach(ary, AddressOf tbl.Rows.Add)
            ds.EnforceConstraints = True
        End Sub
    End Class

違反を報告
引用返信
■35539 / ResNo.4)  Re[3]: WebView2によるスクレ―ピング
□投稿者/ Wan 付き人(83回)-(2023/11/12(Sun) 10:51:31)
  • アイコンHongliang様
    いつも、丁寧なご指導ありがとうございます。

    ご指摘のように、
    retrn hyou → hyouにしたら返り値が取れました。

    教えて頂いた内容を熟読して、取得した返り値を加工していきたいと思います。

    ありがとうございました。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]






Mode/  Pass/


- Child Tree -