今回のテーマ
こんにちは、サルモリです。
皆さん、Seleniumを使用して、Webの自動化を楽しんでいますでしょうか?
SeleniumのSendKeyメソッドを使用して、凄く長い文字列をテキストエリアに入力しようとした時、
「あまりにも時間かかりすぎてやってらんねぇ!!!」となったので、
今回はその対策方法を書いていきます!
対策方法
結論から言うと、SeleniumのExecuteScriptメソッドを使用して、javascriptで入力します。
C#の場合は下記のようなソースコードを書けばできます!!この例では、getElementByIdでidを取得して、そのタグに対して値を入力します。
1 2 3 4 5 6 |
//longcontentは凄く長い文字列 String longcontent = "凄く長い文字列"; //D:\testフォルダにmsedgedriver.exeがあります。 var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\test", "msedgedriver.exe")); //ExecuteScriptメソッドを使用して、JavaScriptを実行する。 driver.ExecuteScript("document.getElementById(\'idの値\').value = \'" + longcontent + "\'"); |
この記事を読んでいる方はSeleniumが動く環境が整っていると思いますが、環境設定などは下記の記事に書いてあります。
こちらもCHECK
-
【2024年2月最新版】C#でMicrosoft Edgeを自動化してみよう
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 まえがき こ ...
続きを見る
この方法を使用すれば、SendKeyメソッドを使用した時に比べて、1000倍は早くなりますよ!!
SeleniumのExecuteScriptメソッドで引っかかったポイント
上記のプログラムを書いたのはいいもののまだ引っかかるポイントがあったので、そのポイントも残しておきます。
javascriptの構文でエラーが発生していたので、情報が多いのが助かりました^^
引っかかりポイント1
入力したい文字列のシングルコーテションを対処する。
まずはシングルコーテーションに対して、「\'」としてエスケープしてあげましょう。
引っかかりポイント2
入力したい文字列の改行を対処する。
改行がある場合「\r\n」も対処しないとエラーが発生します。私の場合は\r\nを<br>に置き換えて対処しました。
対応例は下記のソースコードです。
1 2 3 4 5 6 7 8 |
//longcontentは凄く長い文字列 String longcontent = "凄く長い文字列"; //シングルコーテションをエスケープし、改行は<br>に変更する。 String replongcontent = longcontent.Replace("'","\\\'").Replace("\r\n", "<br>"); //D:\testフォルダにmsedgedriver.exeがあります。 var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\test", "msedgedriver.exe")); //ExecuteScriptメソッドを使用して、JavaScriptを実行する。 driver.ExecuteScript("document.getElementById(\'idの値\').value = \'" + replongcontent + "\'"); |
上記のようにすることで私のやりたいことができました!!よかったよかった!!
まとめ
今回はSeleniumのSendKeyメソッドが遅すぎる時の対処方法を記述しました。
今回の例ではidのみですが、classやnameなどでの取得も勿論できます!
JavaScriptで調べれば沢山載っているので、落ち着いて対処してくださいね!!
この記事で皆さんのお役に立てていれば幸いです!それでは、また!!