Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@harryyuni

一太郎でInternet Explorerを動かすwebスクレイピング(QiitaのSuperPlayRite初記事かもしれない)

概要

 普通に記事を書くつもりが、タグでSuperPlayRiteが表示されず、キーワード検索で引っかからず、一太郎で検索しても、ファイル操作くらいしか出てこず、そもそもQiitaにSuperPlayRiteの記事が存在しないのでは?と思いながら書いております。私の検索が甘い可能性はおおいにあります。

SuperPlayRiteとは何か

 一太郎8以降に搭載されたマクロ言語です。最新の一太郎もこちらの言語で動きます。
 私が知る限り一太郎SuperPlayRiteの本はこれが最新で唯一のものです。勉強するならこちらをお求めください。
https://www.justsystems.com/jp/news/97f/news/j970519z.html
(1997年05月発売)
・・・お求めできない・・!
 今はプレミアがついて、オークション等で出品されるとまあ1万円は下らないですね。
 最高額4万円で取引されたのを見たこともあります。

 全国の図書館でまだ置いてあるところが少しあるので、図書館で取り寄せるのが一番よい方法だと思います。やりましょう、SuperPlayRite
https://iss.ndl.go.jp/books/R100000002-I000002645644-00
(国立国会図書館オンライン)

以下所蔵図書館

国立国会図書館 東京 本館書庫
東京都立多摩図書館
神奈川県立川崎図書館
福井県立図書館
静岡県立中央図書館
京都府立図書館
宮崎県立図書館

 ちなみに、一太郎7以前はずっとPlayRiteという言語でしたので、PlayRiteの本はそこそこ流通しています。SuperPlayRiteと互換性がないので(コンバート機能はありますが)間違えてPlayRiteの本を買わないよう注意してください。
 時代は'97からずっとSuperPlayRiteですよ!なんか時代的にスーパーサイヤ人の影響を受けたネーミングではないだろうか。

なぜ一太郎を使うのか

 僕は、ワードよりもインデント処理が分かりやすく、変にずれたりしないところが好きで一太郎を使っています。
 ほかにも、
 ・袋文字が簡単に作れ、チラシ用途もいける
 ・とにかく日本語に特化した仕様
 ・日本全県の地図画像データが入っているなど日本人向け
 
 使ってみるといいとことはたくさんあります。まあ会社が買っているからという強い動機がありますが、使うのを止めたからといって働き方改革にはならないことを断言します。
https://www.sankei.com/premium/news/180212/prm1802120001-n1.html
https://www.j-cast.com/2018/01/18319038.html?p=all
(文書作成、ワードに統一 農水省、効率化で働き方改革)
 このとき、農水省に出し抜かれた気持ちが全くなかったといえば嘘になりますが、一太郎でWEBスクレイピングまでできるんだぞ、と農水省に知ってもらいたい気持ちも多少あります。
 当然Wordでもできますしネットや本に情報も多くてやりやすいですけどね!

コード

%は変数、\は改行、!!はコメントアウトです。
IDやパスワードなどの問題も生じませんし、ページ遷移の問題もない簡単な方法として、開かれているウインドウをShell.Applicationで取得する方法を採っています。

SuperPlayRite
declare variable %ie as object, \\
                %shellApp as object, \\
                %win as object, \\
                %htmldoc as object
set %shellApp = CreateObject("Shell.Application")
    foreach %win in %shellApp.windows
        If %win.Name = "Internet Explorer"  And Exact(%win.LocationName, "○○")  Then!!○○に一致するLocationNameのウインドウを見つけたらループ抜ける
            set %ie=%win
            exit foreach
       end if
    next
    Message(%ie.LocationName)!!LocationNameをメッセージ表示 
    Set %htmldoc = %ie.Document
    Message(%htmldoc.getElementsByName("text")(0).value)!!textの入力文字をメッセージ表示
    %htmldoc.getElementsByName("text")(0).value="テスト"!!textにテストと入力

 ほとんどExcelVBAと同じ方法でスクレイピングできることがお分かりいただけると思います。

 ウインドウの選別の見通しを立てたいときはPowerShellで

powershell5.1
$shell=new-object -comobject shell.application
$ieWindows=$shell.windows()|where{$_.name -match "Internet Explorer"}
$ieWindows

2020-05-19.png

こんな感じで全部のウインドウが表示されるので、LocationNameなどで特定するとよいと思います。
 Windowを特定した後は、getElementsByNameなど要素を特定してデータを取得したりデータを飛ばしたりするため、特定ページのHTMLを確認する必要があります。
HTML表示はF12でもよいですが、PowerShellでもできます。特にF12ですべて表示されないときはPowerShellが便利。

全ウインドウのHTMLを全表示する場合(大量になりがちなので不要なウインドウは閉じて)

powershell5.1
$shell=new-object -comobject shell.application
$ieWindows=$shell.windows()|where{$_.name -match "Internet Explorer"}
$ieWindows.document.body|select-object *

LocationNameに〇〇を含むウインドウのHTMLを全表示する場合(おすすめ)

powershell5.1
$shell=new-object -comobject shell.application
$ieWindows=$shell.windows()|where{$_.name -match "Internet Explorer"}
$ie=$ieWindows|where{$_.LocationName -contains "○○"}
$ie.document.body|select-object *

こんな感じで打てばHTMLの取得もできて便利です。

 じゃあ全部PowerShellでやればいいじゃんとも言われそうですが、オブジェクト渡しの関係でPowerShellはちょっと低速です。アプリを開いたりすると起動時間までプラスされてしまうので、最終的に一太郎でデータを使ったり、データを一太郎から飛ばすのであれば、SuperPlayRiteでやった方が高速です。もちろん、CSVやテキストファイルで完結するならPowerShellがおすすめです。

僕がSuperPlayRiteに求めるもの

 オブジェクト指向というか、オブジェクトツリー構造でファイルやシート、部分を指定して入力できるようにしてほしい。
 Currentdocumentで特定のファイルをアクティブにして選択し、いちいち範囲を設定して入力というのが手間です。ActiveDocumentやActiveWindowのような特定方法もおそらくないです。
 そして、文章の一部を選択して変数に入れられない問題。clip→pasteを繰り返すプロセスは辛いです。
 結局、手作業でできる処理をマクロで再現したと言うに過ぎない感があります。
結局、変数の使いやすさからVBSやExcelVBAで動かすことにしたこともあります。そのあたりに詳しい方がいれば、どうか御教授ください。
 そして一緒にSuperPlayRiteの記事を増やしませんか。
 だって、JustSystemの、日本のプログラミング言語ですよ。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What is going on with this article?