9.「要約」、「請求の範囲」、「詳細な説明」を開く
ここまでの操作で、目的の公報の文献表示画面が開き、このウインドウを変数 objIE2に取り込むことができた。ここでも、次の操作に入る前に表示の完了を確認することが重要である。既にオブジェクトの読み込みまで完了しているのだから、問題なさそうなものだが、実際にここで表示完了の確認をせずに、次の操作として、「要約」のリンクを探してクリックしようとすると、「要約」のリンクが見つからないという事態が頻繁に発生する。そこで、この画面の表示が完了したことを、ここでは”図面”という語句の表示によって確認する(”図面”ではなくて、”詳細な説明”でも良いはず)。
i = 1
Do While InStr(objIE2.document.body.innerHTML, “図面”) = 0 And i < 300
DoEvents
i = i + 1
Application.Wait [Now()] + 100 / 86400000
Loop
さて、この状態では、書誌だけが内容表示されており、要約、請求の範囲、詳細な説明は、閉じた状態となっていて内容は表示されていない。そのため、これらを全て開いた状態にして、内容を表示させる必要がある。(例外があって、サイズが非常に大きい公報は、書誌、要約、請求の範囲、詳細な説明が、それぞれのブロックに分割されず、1つにまとまった状態になった上で、複数のページに分割されて表示される。例えば、特開2019-010101)
そこで、下図の④、⑤および⑥のリンクをクリックすることで、それぞれ「要約」、「請求の範囲」および「詳細な説明」の内容を表示させてやる。
ここでは「要約」をクリックし、内容を表示させる処理についてコードを下に示す。
For Each objtag In objIE2.document.getElementsByTagName(“a”)
If InStr(objtag.outerHTML, “要約”) > 0 And InStr(objtag.Text, “開く”) > 0 Then
objtag.Click
Do While objIE2.readyState <> 4 Or objIE2.Busy
DoEvents
Loop
i = 1
Do While InStr(objtag.Text, “開く”) > 0 And i < 300
DoEvents
Application.Wait [Now()] + 100 / 86400000
i = i + 1
Loop
Exit For
End If
Next
Set objtag = Nothing
最初に、このページ(objIE2)の全てのAタグの中から、outerHTMLに”要約”を含むタグを探し、これをクリックする。クリックした後、objIE2.readyState と objIE2.Busy を Do While~Loop でチェックする準備完了待ち処理を行う。内容が表示されると、「要約」のリンクの右側の表示が「開く +」から「閉じる -」に変わるので、その確認を行う。この確認を行わずに、次の処理に進むと、準備ができていないうちに次の命令が来てしまうため、その処理を実行できないことがあるようだ。ここでは、「開く」が表示されたままであれば、「開く」が表示されなくなるまで、最大30秒間待機する、という処理にしている。
2021/02/03 ここの部分、J-PlatPat側の仕様変更に伴い、修正。
文献表示画面にて、最初から「要約」が開いた状態で表示されるように変更になったので、「要約」のリンクを見つけ、その横に「開く +」の表示がある場合には「要約」のリンクをクリックするが、「開く +」の表示がない(既に開いている)場合には、その操作をスキップするように変更した。
実際には、この場面には例外がいくつかある。特許公報や公告公報の場合には、そもそも要約が含まれていないので、”要約”リンクが表示されない。また昭和57年以前の公開公報などの古いものは、このページが開いたときに、要約、請求の範囲、詳細な説明が閉じた状態となっている点は同じなのだが、”要約”と”請求の範囲”のリンクをクリックしても、その内容が表示されることはなく、今まであったリンクそのものがそれぞれ消えてなくなってしまう一方で、”詳細な説明”をクリックすると、特許請求の範囲と詳細な説明が1つのブロックとしてまとめて表示される。(画面からは”要約”の文字やリンクが消え、objIE2.document.body.innerHTMLからも”要約”は消えてしまうが、objtag.Textの中には、”開く”がそのまま残っているので、それらを考慮して処理する必要がある)そんなわけで、ここの処理は、これら様々な例外にも対応した複雑なものにする必要があるが、ここでは省略する。
続いて、「要約」に対して行ったのと同様の処理を、「請求の範囲」と「詳細な説明」に対しても行う。これは、”要約”の部分を、それぞれ”請求の範囲”と”詳細な説明”に置き換えるだけでよい。これによって、このページには、書誌、要約、請求の範囲、詳細な説明が、それぞれ開いた状態で表示されているはずである。(公報によっては、例外もあるが。(特許公報、公告公報、古い公報など))
10.固定URLを表示
書誌、要約、請求の範囲、および詳細な説明の全てがそれぞれ開いた状態になったので、最後に、この公報の固定URLを取得する。これには、このページの右上に並んでいるいくつかのボタンのうち、「URL」ボタン(下図の⑦)をクリックする。
すると、次のように、URLが表示されたメッセージがポップアップする。 (このとき、2.事前設定、(2) IEの設定、②のスクリプトによる貼り付け処理の設定を正しく行っていないと、ここの処理がうまく動かないので、必ず事前設定を行っておくことが重要である)。
URLボタンをクリックする処理は、次の通り。
For Each objtag In objIE2.document.getElementsByTagName(“a”)
If InStr(objtag.outerHTML, “URL”) > 0 Then
objtag.Click
Exit For
End If
Next
Set objtag = Nothing
11.表示内容をダウンロード
URLはクリップボードにコピーされているはずだが、ここではわざわざクリップボードの中身を見に行ったりせず、また、この「URLコピー」というメッセージを消すこともなく、ここで表示されているウインドウ(objIE2)の中身を全部まとめてダウンロードする。
Dim Fname As String
Fname = “D:\” & patnum & “.txt”
Open Fname For Output As #1
Print #1, objIE2.document.body.innerHTML
Close #1
objIE2.Quit
Set ObjIE2 = nothing
ここで、objIE2.document.body.innerHTML には、この公報の、書誌、要約、請求の範囲、詳細な説明、およびURLが全て含まれているので、innerHTMLをそのまま全部ファイルに書き込んでみた。後で、このファイルを読み込んで、必要な情報をそこから取り出したり、加工したりすればよい(もちろん、ファイルに書き込まず、変数に取り込んで、引き続き様々な処理を行っても良い)。
最初に検索窓に入力した複数の公報のうち、次の公報をダウンロードするためには、「7.検索結果一覧にて公報のリンクをクリック」に戻って、objIE の中から次の公報のAタグを探してクリックする操作以降を順次繰り返せばよい。
J-PlatPat側の応答速度、ネットの速度、こちらのPCの速度など、様々な要因によって、全体の処理速度は大きく影響を受けるため、早いときには1件5秒以内に操作を終えることができる一方、遅いときには1件に30秒以上かかるときもあるのだが、与えられた状況の下で、ほぼ最短時間で処理できるようになったのではないかと思われる。最初は、1つ1つの処理の前に、数秒間ずつのwaitを入れていたが、それでも応答の遅いときにはエラーが出たり、取りこぼしが出たりしていたのがウソのように、ほぼ問題なくサクサクと処理を終えることができるようになったようだ。そのポイントとなったのは、それぞれの処理の前に、都度、その準備が完了していることを何らかの方法で確認するルーチン(次の段階の表示が行われたことを確認するループや、前の段階の表示が消えたことを確認するループなど)を入れることであった。少なくともJ-PlatPatを操作する場合には、この方法は非常に有効であると言えそうだ。
一応、これで目的の処理を終えることができたようなので、今回の連載はこれで終わりにしたい。質問やコメントがあれば、遠慮なく書き込んでください。
2021年2月から文献表示画面において、最初から「要約」が開いた状態で表示されるようにJ-PlatPat側の仕様変更があったようなので、それに対応して、コードを少し修正した。
わかりやすい説明と事例、大変勉強になります。
J-platpatについて、経過情報をクリックすることはできたのですが、その先の審査記録の中の各項目(例えば「特許願」など)をクリックするにはどうすればよいでしょうか?
また、「手続補正書」が複数ある場合に、最新のものをクリックするには、どうすればよいでしょうか?
よろしくお願いします
MAさん、コメントありがとうございます。私の書いた説明が少しでもお役に立てたのであれば幸いです。
ご質問の件、ここまでの処理と比べると、結構ややこしい処理になります。あまりきれいなプログラムではないので、お見せしたくないところもありますが、せっかくのご要望ですので、エッセンスだけでも公開したいと思います。コメントで説明するには複雑すぎますので、別記事(「Excel VBAを使用してJ-PlatPatから公報テキストをダウンロードする方法(6)など)として公開したいと思います。申し訳ありませんが、少しお時間をください。(私自身も、自分の書いたプログラムを思い出さないとならないので)
経過情報のページから手続き補正書などの書面を開く方法について、このブログの新たな記事として、手順を説明してみました。
今回紹介したのは、経過記録のページ内にある全てのリンク付きの書面を1つずつ順番にクリックして開く方法となっています。そのため、ご質問にある、複数存在する手続き補正書のうちの最新のものをクリックする方法そのものではありませんが、ヒントにはなっていると思います。
早々に対応いただきありがとうございました。
参考にさせていただきます。