webブラウザについて

投稿者:とおりすがりや 投稿日:2019/02/20(Wed) 11:48:32 No.2389

短い間隔で質問するのは気が引けたのですが
また皆さんのお力をお借りしたいです。

現在私は自動帳簿付け用のアプリを作っています。
ネットのショッピングモール、ヤフーショッピングでの購入履歴をスクレイピングしようとしていたのですが
ログイン技術がいまいち理解ができないため、webブラウザ上でログインし、ページを移動してデータを収集しようとしました。

webブラウザ、ログインまでは上手くいったのですが、肝心の購入履歴のソースが文字化けしてしまいます。

文字コードの違いからソースの文字化けを疑い、文字コードの指定も行ったのですが解決しませんでした。

ただ、「〜〜のソース」で収集した情報は文字化けしているのですが「〜〜のタイトル」で収集した情報は正しく表示されてしまい、何処がどう違うのかさっぱりわからなくなりました。

ヤフーショッピング限定の話なのでお手数となるでしょうがご協力お願いします。

ちなみに私が作ったサンプルは以下の通りです。



窓というウィンドウを作る
窓にブラウザ1というウェブブラウザを作る
窓を最大化する
  そのドッキング方向を全体に変える
アドは、「https://odhistory.shopping.yahoo.co.jp/cgi-bin/history-list
ブラウザ1のアドレスをアドに変える


窓を表示
3秒待つ

ブラウザ1のソースを表示
ブラウザ1のソースを「買った.txt」に「EUC-JP」で保存

Re: webブラウザについて

投稿者: 投稿日:2019/02/20(Wed) 20:57:54 No.2391

 こんにちは。

 私はYahoo!ショッピングのアカウントを持っていないので、実際に動かしていないのですが、tとりあえず、気になったところだけ書いておきます。
 「3秒待つ」でページの読み込みを待っていると思いますが、これはあまりよろしくないです。
 「ブラウザ1のページが読み込まれた時の手順」でページの読み込みが終わってから処理をさせることができるので、このほうが確実だと思います。
 とりあえず、そこだけ書き換えたソースを記載しておきますので、参考にしてください。

----------
窓というウィンドウを作る
窓にブラウザ1というウェブブラウザを作る
窓を最大化する
  そのドッキング方向を全体に変える
アドは、「https://odhistory.shopping.yahoo.co.jp/cgi-bin/history-list
ブラウザ1のアドレスをアドに変える

窓を表示

ブラウザ1のページが読み込まれた時の手順
ブラウザ1のソースを表示
ブラウザ1のソースを「買った.txt」に「EUC-JP」で保存
終わり
----------

 それでは。

Re^2: webブラウザについて

投稿者:とおりすがりや 投稿日:2019/02/22(Fri) 09:01:28 No.2394

ご助言ありがとうございます。

ただ、おっしゃる通りに「ブラウザ1のページが読み込まれた時の手順」にはそのような機能は無いようなのですが……
「手順」と書いている以上、「ブラウザ1のページが読み込まれた」という実行する文章がいるのはわかるのですが
何も保存されずにプログラムが終了してしまいます。

Re: webブラウザについて

投稿者:通り道 投稿日:2019/02/20(Wed) 23:40:07 No.2392

わりと、根の深いところの問題のようです。

一応、.Netの範囲では解法があるようなのですが、プロデルの場合、プロデルの
命令の内部に実装してもらえないと難しそうです。
後で、ドットネット命令の組み合わせでできるかどうか試してみます。


以下、参考情報。
https://teratail.com/questions/40300

DocumentTextから取得した時点ですでに不可逆に化けているので、その後どう加工しても元に戻らない ということのようです(取り出す時点で、dotnetの内部コードとの変換が行われてしまうたためだと思われます)。そのため、DocumentStreamからエンコードの加工を経由せずに取り出し、MemoryStreamなどで明示的にエンコードすることで、希望したエンコードとして取り出す必要がある ということのようです。

Re^2: webブラウザについて

投稿者:とおりすがりや 投稿日:2019/02/22(Fri) 09:06:56 No.2395

思った以上に面倒なことのようですね。
正直プログラミング初心者の私には理解できているのか怪しいです。
つまり

ソースの取得の際に文字化けした状態でプログラム内部に保存され、文字化けした状態で文字として保存してしまっている。
ということでいいのでしょうか?

確かにそうだとするといくらプログラムを考えても本体をどうにかしないと解決しませんね。
しかし、なぜ「ブラウザ1のタイトル」は読み込めたんでしょう?

▲ページの先頭へ

- WebForum -