質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

C# ブラウザの自動操作をするには

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 6,017

ElecDove

score 249

お世話になります。

Web自動巡回ツールのようなものをC#(VS2015 Community)で作っているのですが、ブラウザによるページの取得をどうするかで困っています。

現在試しているのは

  1. WebBrowserControlを使った内蔵ブラウザの自作
  2. Webkit.Netを使った内蔵ブラウザの自作
  3. SHDocVw.InternetExplorerを使ったIEの自動操作
  4. Seleniumを使った各ブラウザの自動操作

です。
理由は以下に記述しますが、1と2には限界を感じているので3か4が選択肢になっています。

  1. の問題点は、一部のサイトでフリーズすること。UerAgentの変更(レジストリより)で回避できる場合もあるのですが、すべての環境で同じ値で動くわけでもなく、またサイト毎に値が異なるためその都度値を変更するのは困難
  2. の問題点はDOM操作がうまくできないこと・・・自分がヘタなだけなのかもしれないのですが、調べた情報ではまだあまり対応しきれていないような・・・それと情報が1と比べて少ないです・・・(英語ばかりなのかな?)
  3. の問題点はまだ良くわかっていないです
  4. の問題点もまだ良くわかっていないですがフレームやポップアップには対応していないとの情報を見かけました。フレームやポップアップのサイトもかなりあるのでこれが使えないのは致命的・・・。

自分で使用する、というよりも複数の人が使うツールなので、環境依存度が高すぎるのも困ります。せいぜいインストーラーで対応+ちょっとした設定変更くらいで使えるようにしたいと思っています。
また、ブラウザに拘りは特に設けず、この目的が達成できるのであれば、主要ブラウザ(IE、Chrome、Firefox)であればどれでもいいかなと思っています。(複数のブラウザに対応できるのならなおよいのですが、できたらいいなぁ~程度です)

DOM操作はかなりやります。主にいろいろな値の取得とformへの記入、送信ですが・・・。
JavaScriptに関しては直接関数を叩く、ということはなく、あくまでUIで実装されているもの(submitボタンに関連付けられている関数)を想定された手段で(submitボタンを押すことで)実行する程度です。
直接この関数を実行できればいいなぁなんて思ったりしますが、どうしてもやりたければ要素追加しちゃいます。。。。

選択肢3の SHDocVw.InternetExplorerを使ったIEの自動操作がよさそうですが、「これはできないよ」とか難しいんじゃないかな?というアドバイスありましたら教えていただけますと幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

0

私が求めているような回答がつかないので一旦締めさせていただきます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

HTMLプロトコルを勉強して、socketかなんかで直接、情報を受信、送信できるようになるのが一番の近道かな。
具体的に、何を送れば何が送られてくるか、がわかれば大抵のことはできます。
ブラウザーコントロールですとブラウザー依存になり、かえってややこしいんですよ。
C#ならWebRequest/WebResponseあたりかな。
遠回りに見えますが、巡回ツールなら一番近道だと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/28 20:25

    回答ありがとうございます
    httpのプロトコルはある程度知ってるので通信できなくもないのですが、JSでフォームの内容を作ったり、Ajaxをフル活用したページが多く、JSに依存したページばかり、というのが課題です
    JSのエンジンは流石に作れないので、htmlの解釈はすべて外部ブラウザに丸投げせざるを得ない状況です…

    キャンセル

0

>formへの記入、送信ですが・・・。 

これも結局、HTTPプロトコルでpostしているだけです。
検索したら
http://www.yoheim.net/blog.php?q=20120611
このサイトがわかりやすいかな

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/28 20:30

    回答ありがとうございます
    httpやhtmlはCSを学ぶより随分前からやってたので(CGIも作ったりしてます)通信はできますが、htmlの解釈やJSの実行がハードルになっています…。
    またログインサイトが大半なのでSessionID等も考えなければいけません…。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる