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

■35389 / 親記事)  Seleniumで開いているページのTableを編集したい
  
□投稿者/ とととんとん 一般人(1回)-(2023/02/16(Thu) 17:56:18)
  • アイコン環境/言語:[C#/.NET Framework 4.7.2/Windows10] 
    分類:[.NET] 

    開いているページのTableの特定列にある文字列を
    置き換えたいと思っています。(HTML全部取得してReplaceして表示も可)

    ページを開くところまでは問題なくできたのですが、
    Tableにあるデータの置き換え方法が分かりません。
    調べてもSendKeysしか出てきません。

    F12で開いたときに編集できるものなので
    Seleniumでも編集できると思っています。

    どのようにしたらテキストの置き換えができますか?

    .NET Framework 4.7.2
マルチポストを報告
違反を報告
引用返信 削除キー/
■35390 / ResNo.1)  Re[1]: Seleniumで開いているページのTableを編集したい
□投稿者/ Hongliang 大御所(638回)-(2023/02/16(Thu) 20:03:57)
  • アイコンJavaScriptで書き換えるということになるかと思います。
    SeleniumでのJavaScriptの実行は、
    https://qastack.jp/programming/6229769/execute-javascript-using-selenium-webdriver-in-c-sharp
    まあこの辺とかまず参考にしてみてください。
違反を報告
引用返信 削除キー/
■35391 / ResNo.2)  Re[1]: Seleniumで開いているページのTableを編集したい
□投稿者/ 魔界の仮面弁士 大御所(1538回)-(2023/02/16(Thu) 21:51:43)
  • アイコンNo35389に返信(とととんとんさんの記事)
    > Seleniumでも編集できると思っています。

    Selenium についてはご存じなのですね。
    ExecuteScript までの流れは Hongliang さんが紹介されているので、
    私からは DOM 操作について言及してみます。


    > 開いているページのTableの特定列にある文字列を
    > 置き換えたいと思っています。(HTML全部取得してReplaceして表示も可)

    該当列の TH/TD タグの内容を列挙すれば良いと思います。

    TR タグの cells プロパティから、TH/TD タグを拾うことができます。
    https://developer.mozilla.org/ja/docs/Web/API/HTMLTableRowElement

    各セルの cellIndex プロパティからは、行内での列番号を得ることもできます。
    https://developer.mozilla.org/ja/docs/Web/API/HTMLTableCellElement


    ただし、結合セルや非表示セルがある場合は注意が必要です。

    1. TH/TD 要素の colSpan プロパティが 2 以上を返すケース
    2. TR 要素の rowspan プロパティが 2 以上を返すケース
    3. TR の子要素(つまりTH/TD)が非表示(display:none スタイル)が設定されているケース

    こうした構成の TABLE では、Web 上の見た目の列番号と、
    HTML の階層における cellIndex の値が一致しなくなることがあります。
違反を報告
引用返信 削除キー/
■35392 / ResNo.3)  Re[2]: Seleniumで開いているページのTableを編集したい
□投稿者/ 魔界の仮面弁士 大御所(1539回)-(2023/02/17(Fri) 00:49:28)
  • アイコンNo35391に追記(魔界の仮面弁士の記事)
    >>開いているページのTableの特定列にある文字列を
    >>置き換えたいと思っています。(HTML全部取得してReplaceして表示も可)
    > 該当列の TH/TD タグの内容を列挙すれば良いと思います。

    おっと。列挙後のデータの置き換えについての説明が漏れていましたね。

    TH/TD タグの中身を置き換えるために、
    textContent プロパティまたは innerHTML プロパティを利用できます。
    https://qiita.com/iwasaki-hub/items/9f339ddb7c20ec804723
違反を報告
引用返信 削除キー/
■35393 / ResNo.4)  Re[3]: Seleniumで開いているページのTableを編集したい
□投稿者/ とととんとん 一般人(1回)-(2023/02/17(Fri) 17:52:33)
  • アイコンHongliang様、魔界の仮面弁士様、ありがとうございました!
    出来ました……!!!
    たぶん出来る人からみたら適当すぎてダメだとは思いますが、
    動けば良いのです……!本当にありがとうございます!!

    参考までに、ソース載せときます。

    string scripts = "var sampleElements = document.getElementsByClassName('test-group'); for (var i = 0, len = sampleElements.length; i < len; i++) { sampleElements[i].innerHTML = sampleElements[i].innerHTML.replace('置換前', '置換後') }";
    //var sampleElements = document.getElementsByClassName('test-group');
    //for (var i = 0, len = sampleElements.length; i < len; i++)
    //{
    // sampleElements[i].innerHTML = sampleElements[i].innerHTML.replace('置換前', '置換後')
    //}

    chrome.ExecuteScript(scripts);
解決み!
違反を報告
引用返信 削除キー/
■35394 / ResNo.5)  Re[4]: Seleniumで開いているページのTableを編集したい
□投稿者/ 魔界の仮面弁士 大御所(1540回)-(2023/02/17(Fri) 22:08:25)
  • アイコン
    No35389に返信(とととんとんさんの記事)
    ■No35393に返信( とととんとんさんの記事)
    > □投稿者/ とととんとん 一般人(1回)
    
    どうして「1回」のままなのかと思ったら…よく見たら別名という罠!
    
    
    > 参考までに、ソース載せときます。
    文字列内での改行が必要な場合、「@"〜"」を使えますよ。
    https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/tokens/verbatim
    https://ufcpp.net/study/csharp/st_string.html
    
    
    string scripts = @"
     const sampleElements = document.getElementsByClassName('test-group');
     for (let i = 0, len = sampleElements.length; i < len; i++) {
       sampleElements[i].innerHTML = sampleElements[i].innerHTML.replace(arguments[0], arguments[1]);
     }
    ";
    chrome.ExecuteScript(scripts, "置換前", "置換後");

解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -