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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Q&A

解決済

1回答

824閲覧

C# IE操作  フレーム分割されたページを操作する

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

0グッド

0クリップ

投稿2018/08/23 05:19

編集2018/08/23 08:27

前提・実現したいこと

C# IE操作  フレーム分割されたページを操作したいと考えています。

開発環境:Visual Studio 2017
使用OS:Windows 7

しかし、メインページ内にある「auth1.html」内にログイン画面用のID・passwordを入力する画面があり取得・入力等が出来ていない状況です。
webbrowserはIE7であるのが原因で指定ページを接続できないので考えていません。
IEを起動するという下記のようなソースで実行しようとしていますが、

エラー箇所:var window = doc.frames.item(ref x) as mshtml.HTMLWindow2;
エラー内容:System.InvalidCastException: '指定されたキャストは有効ではありません。'

上記エラーが出てしまいます。
解決策等を教えていただきたいです。
初心者的質問だと思いますがよろしくお願いいたします。

c# プログラム ソース内容

var IE = new SHDocVw.InternetExplorer(); IE.Visible = true; object URL = "指定URL"; IE.Navigate2(ref URL); IE.Wait(); var doc = IE.Document as mshtml.IHTMLDocument2; object x = 1; var window = doc.frames.item(ref x) as mshtml.HTMLWindow2; object url2 = window.location.href; IE.Navigate2(ref url2);

メインページソース

<html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="テスト" content="テスト"> <title>テスト</title> <meta name="id" content="auth" > <script type="text/JavaScript"> <!-- top.location.target="_top"; if (window.location.target != "_top") { top.location.href=window.location.href; } var savedPwd = ""; function onPageUnload() { window.name = ""; } window.onunload=onPageUnload; // --> </script> </head> <frameset name="frameMain" id="frameMain" rows="100%,0%,0%"> <frame src="auth1.html" name="authFrm" id="authFrm" scrolling="no"> <frame src="policyBanner.html" name="policyBannerFrm" id="policyBannerFrm" scrolling="no"> <frame src="emptyView4.html" name="authTgtFrm" id="authTgtFrm" scrolling="no"> </frameset> </html>

auth1.html 子ソース

div id="login_box" align="left"> <div class="vgap85"></div> <div id="error_box" style="visibility:hidden;"> <div id="error_text"> </div> </div> <div id="admin_reauth_text" style="visibility:hidden;"> 管理を始めるためにパスワードを入力してください: </div> <div id="username_line"> <div class="fieldName"> ユーザ名: </div> <div class="fieldValue"> <input type="text" id="userName" name="userName" value="" maxlength="128" autocomplete="off" style="width: 180px;"> </div> </div> <div class="vgap8"></div> <div id="password_line"> <div class="fieldName"> パスワード: </div> <div class="fieldValue"> <input type="password" name="pwd" value="" maxlength="63" autocomplete="off" style="width: 180px;"> </div> </div> <div class="vgap8"></div> <div id="language_line"> <div class="fieldName"> 言語: </div> <div class="fieldValue"> <select name="select2"> <option>日本語</option> </select>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/23 05:26

コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。
退会済みユーザー

退会済みユーザー

2018/08/23 05:27

あと、何を作っているか(Windows Forms? その他?)と、開発環境(OS, .NET, Visual Studio のバージョンなど)を書きましょう。
退会済みユーザー

退会済みユーザー

2018/08/23 05:31

もう一つ、「webbrowserではIE7の関係上詰まってしまうため」の詰まってしまうとはどういう意味か、「エラーが出てしまいます」というのはどの行でどういうエラーが出るのか、エラーメッセージをコピペして書いてください。
guest

回答1

0

ベストアンサー

webbrowserはIE7であるのが原因で指定ページを接続できないので考えていません。

そこはレジストリで 8 にでも 11 にでもできます。なので、WebBrowser を使ってみてください。

WebBrowser を使って iframe の中の要素を操作する例を紹介しておきます。

WebBrowser で iframe の中の要素を取得
http://surferonwww.info/BlogEngine/post/2012/08/10/how-to-get-htmlelements-in-iframe-shown-in-webbrowser.aspx

frame でもほぼ同様に可能だと思います。お試しください。

【追伸】

レジストリをいじって IE のバージョンを指定する方法については以下の記事を見てください。

WebBrowserコントロールのIEバージョン
http://www2.hatenadiary.jp/entry/2013/12/20/114342

Web Browser Control – Specifying the IE Version
http://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version

webbrowser ie version などをキーワードに検索すると、他にもいろいろ参考になるページが見つかると思います。

クライアントに PC のレジストリを書き換えてもらうのは期待できないということもあるでしょうけど、アプリケーション起動時に書き込むように作れば済む話だと思います。

投稿2018/08/23 08:45

編集2018/08/23 10:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/23 17:10

回答していただきありがとうございます。 このIE7をIE11に変更する方法は開発PCのみで反映されるのでしょうか。 それとも開発環境以外でも反映されますでしょうか。 私自身は開発PCのみで反映されると考えており、開発PC以外でもプログラムを動作出来るようにしたいと考えています。 その為、WebBrowserコントロールを使用しない方法での回答を希望していました。 説明不足で申し訳ありません。 WebBroeserコントロールを使用せずに動かす方法もあればご教授お願い致します。
退会済みユーザー

退会済みユーザー

2018/08/24 01:27 編集

> このIE7をIE11に変更する方法は開発PCのみで反映されるのでしょうか。 開発 PC か一般 PC かは関係なく、WebBrowser を使うアプリの PC レジストリに、紹介した記事の通り、exe ファイル名と目標の IE のバージョンを登録するのが条件です。 質問者さんが質問に書いたコードは Visual Studio で SHDocVw.dll を参照設定して com ラッパーを作って使っていると思いますが、それが IE11 相当になるということはなく、WebBrowser(これ自身が com ラッパー)と同様に IE7 相当になると思います。 質問者さんのアプリを直接試せるわけではないので 100% 間違いないとは言い切れませんが、自信度 90% ぐらいはあります。 ちなみに、以下の記事にある Aximp.exe (Windows フォーム ActiveX コントロールインポーター) を使ってラッパーを作った場合は確認済みで、自信度 100% です。 SHDocVw.dll と AxSHDocVw.dll の作り方と使い方 http://surferonwww.info/BlogEngine/post/2012/06/23/how-to-produce-and-use-shdocvw-and-axshdocvw.aspx ご自分のアプリで確認してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問