Home
Blog
Inquire

  1. サイトのソースの確認
  2. 要素の特定
  3. 「トップ画面」で「e-Taxで提出する」をクリック
  4. 「トップ画面」で「税理士の方が代理送信を行う場合はこちら」をクリック
  5. 「e-Taxを行う前の確認画面」で「利用規約に同意して次へ」をクリック
  6. 「利用者識別番号有無の確認画面」で「はい」をクリック
  7. 「登録情報の確認」で「利用者識別番号」「暗証番号」の入力
  8. 「登録情報の確認」で「次へ」をクリック

サイトのソースを確認する方法は、

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>【確定申告書等作成コーナー】-税務署への提出方法の選択
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache,no-store" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache,no-store" />
<meta http-equiv ="Imagetoolbar" content="no" />
<meta http-equiv="Expires" content="0" />
  ・
  ・
  ・
 

「理解できない・・・」と思われるかも・・・。
理解できないところは無視して、・・・
(詳しく知りたい方は「HTMLソース」でググって)

既に取得したソースの値は、

       Set htmlDoc = objIE.document
「htmlDoc」という変数に、・・・
そのソースから、取得したい値を特定する方法
  ・「GetElementById」・・・id名から要素を特定
  ・「GetElementsByName」・・・name名から要素を特定
  ・「GetElementsByClassName」・・・class名から要素を特定
  ・「GetElementsByTagName」・・・タグ名から要素を特定
など

 
トップ画面に戻り、ソースを眺めて見ると、
e-Taxで提出する」という文字、「税理士の方が代理送信を行う場合はこちら」という文字を発見。
「e-Taxで提出する」を選択した後に「税理士の方が代理送信を行う場合はこちら」を選択するつもりなので、「e-Taxで提出する」の操作部分は省略し、「税理士の方が代理送信を行う場合はこちら」の選択を処理する操作のコードを追加したいと思います。
そのソースの中から「税理士の方が代理送信を行う場合はこちら」部分を抽出。
 「Ctrlキー+ F」として検索すると早く見つけられます。

<button class="button positive" type="button" onclick="・・・">税理士の方が代理送信を行う場合はこちら
 

この部分から特定できる要素を検討。
GetElemntById」で取得できるかを検討。
---上のボタン(「税理士の方が代理送信・・・」)のソースには、「id = ・・・」という箇所がないためNG
GetElementByName」で取得できるかを検討。
---上と同じく「name =・・・」 という箇所がないためNG。
GetElementByClassName」で取得できるかを検討。
---「class = "button positive"」と「class = "text"」ある。
---「button」「text」をclass名と指定している箇所があるが、「positive」をclass名と指定している箇所はここだけ。
GetElementByTagName」で取得できるかを検討。
---「button」「span」というタグも他の箇所で使われている。

「positive」というclass名「GetElementByClassName」を使って特定!

  vobj = htmlDoc.getElementByClassName("positive")
 
   で、要素を特定することができるはず・・・
   この要素には、「onclick="・・・」とあるので下図の様にクリック処理が可能だろう。
 

  vobj = htmlDoc.getElementsByClassName("positive")
  vobj.Click
 

「実行」ボタンをクリックして実行してみると・・・下図の画面に遷移


IEが表示されない場合は、
次のコードを「objIE.Navigate・・・」の行の次に挿入して実行
    objIE.Visible = True
   


[e-Taxを行う前の確認]以降の画面も上記と同様に(下表を参考)コードを追加

画面 取得する要素 getElementBy・・・ ID又はClass名
[e-Taxを行う前の確認] 「利用規約に同意して次へ」 getElementById csw0200_next
[利用者識別番号有無の確認] 「はい」 getElementById etax_button

[登録情報の確認]画面内に、「利用者識別番号と暗証番号はお分かりですか。」の問いの箇所と「利用者識別番号」「暗証番号」の入力する箇所がある・・・「利用者識別番号と暗証番号はお分かりですか。」は省略・・・。
「利用者識別番号」「暗証番号」の入力部分のソースは、

   <input type="text" class="textbox-pass w40" name="userNo" maxlength="19" id="userNo" value=""/>
   <input type="password" class="textbox-pass w40" name="oStInputPwd" maxlength="50" size="30" value="" id="oStInputPwd" />
  

この「value=""」の部分に値を入力?

   htmlDoc.getElementById("userNo")
   htmlDoc.getElementById("oStInputPwd")
 

「利用者識別番号」「暗証番号」の部分の要素は以上のように取得。

 値を代入する方法の検討?

プログラムを停止したい行の左部分をクリックすると「●」が表示される。
「実行」ボタンをクリックすると「●」の行でプログラムが停止

確認したい変数を選択し右クリックし「ウォッチ式の追加」

「ウォッチ式の追加」ウィンドウで「OK」すると、「ウォッチ」ウィンドウが表示される。
「式」の「+」部分をクリックすると、各プロパティの値が展開

「value」というプロバティがあるので、次のとおりコードを入力

    htmlDoc.getElementById("userNo").Value = "1234"
    htmlDoc.getElementById("oStInputPwd").Value = "abcd"
 
  実行すると

と表示

次に、上図の固定した値をエクセルで指定した値に変更します。

  htmlDoc.getElementsByName("userNo")(0).Value = ThisWorkbook.Worksheets("入力用").Range("B2")
  htmlDoc.getElementsByName("oStInputPwd")(0).Value = ThisWorkbook.Worksheets("入力用").Range("B3")
 

[エクセル部分の説明]
「ThisWorkbook」・・・今使っているブックのこと(外にエクセルを開いていないのであれば不要)
「Worksheets("入力用")」・・・「入力用」というシート
「Range("B2")」・・・「B2」のセル


上図の「次へ」ボタンをクリックするコードも同じ要領で・・・
ソースを確認

 <div id="userIsKnowing3">
  <button type="button" class="button" onclick="doSubmitIdSearch();return false;">
  <span class="text">次へ
  </button>
 </div>
 

「onclick="・・・」のあるタグの箇所の部分は、
「id = ・・・」という箇所がない、
「name =・・・」 という箇所がない、
「class = ・・・」で指定しているclass名「button」は、他の箇所でも指定している、
「button」というタグも他の箇所で使われている。
ということで、「button」のタグ部分だけではこの要素を特定することができない。

少し範囲を広くして見てみると、「button」のタグは、「div」というタグに囲まれている。
「id="userKnowing3"」は、他の箇所での指定はない。
GetElementById("userKnowning3")で要素を特定し、その後・・・


「children」の中に「ltem1」に「button」や「次へ」という値が表示されている箇所がある。
以下の様にコードを追加。

    htmlDoc.getElementById("userIsKnowing3").Children(0).Click
   

[説明]
「Children(0)」の「0」は「item1」の部分。
「Children(1),Children(2),Children(3)・・・」は「item2,item3,item4・・・」。
以上実行すると
「住所等の情報の確認・訂正」画面が表示

次へ

©2018KanazawaNoSakai