トップ回答者
webBrowser で Googleカレンダーの読み込みで

質問
-
お世話になります。
ボタン1を押すと下記のようなメッセージが出てからグーグルカレンダーが開いてしまいます。
このポップアップを自動的にクリックする方法か、表示させない方法が思いつかないのでどなたか助けてください。
コードは下記の通りです。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication9 { public partial class Form1 : Form { string g_id = "id"; //@Gmai.comは入力しない string g_pw = "pw"; string gmailcom ="@gmail.com"; string url01 = "https://accounts.google.com/ServiceLogin?service=cl&passive=1209600&continue=https://www.google.com/calendar/render&followup=http://www.google.com/calendar&scc=1"; //カレンダー直接 string url02 = "https://accounts.google.com/Logout?continue=https%3A%2F%2Faccounts.google.com%2FServiceLoginAuth&il=true&zx=1ia9s6agnj34r"; //ログアウトアドレス string url03 = "https://accounts.google.com/ServiceLogin?hl=ja&continue=https://www.google.co.jp/"; //普通のログイン画面 (必要ないかも?) public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate(url01); wait_load(); g_login(); } private void button2_Click(object sender, EventArgs e) { g_id = "ID"; //@Gmai.comは入力しない g_pw = "PW"; //webBrowser1.Navigate(url02); //ログアウト処理 webBrowser1.Navigate(url02); //wait_load(); g_login(); wait_load(); MessageBox.Show(g_id); webBrowser1.Navigate("https://www.google.com/calendar/htmlembed?src=beruze%40gmail.com&skipwarning=true"); //webBrowser1.Navigate("https://www.google.com/calendar/htmlembed?src=" + g_id + "%40gmail.com&skipwarning=true"); } private void g_login() { webBrowser1.Document.All.GetElementsByName("PersistentCookie")[0].SetAttribute("checked", "true"); webBrowser1.Document.All.GetElementsByName("Email")[0].InnerText = g_id+gmailcom; webBrowser1.Document.All.GetElementsByName("Passwd")[0].InnerText = g_pw; webBrowser1.Document.Forms[0].InvokeMember("submit"); } private void wait_load() { Application.DoEvents(); while ( this.webBrowser1.IsBusy || this.webBrowser1.ReadyState != WebBrowserReadyState.Complete || this.webBrowser1.Document.Body.InnerHtml == null ) { System.Threading.Thread.Sleep(100); Application.DoEvents(); } return; } private void button5_Click(object sender, EventArgs e) { MessageBox.Show(g_id); webBrowser1.Navigate("https://www.google.com/calendar/htmlembed?src=beruze%40gmail.com&skipwarning=true"); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url.ToString() == url01) { webBrowser1.Navigate(url02); } else if (e.Url.ToString() == url03) { webBrowser1.Navigate("https://www.google.com/calendar/htmlembed?src=" + g_id + "%40gmail.com&skipwarning=true"); } } } }
- 編集済み Makoto Asao 2012年12月18日 8:42
回答
-
> this.txtUserAgent.Text と this.ckBoxUaAdd.Checked がエラーになってしまっています。
これらはフォームにおいたコントロールのインスタンスです。
同じ名前でコントロールを置くか、ご自身の環境にあわせて変えてみてください。
とりあえず、私の環境で「https://www.google.com/calendar/」を呼び出してみたら
普通に表示できました。
環境 Windows7 PRO 32bit, webBrowser1.Version = "8.0.7601.17998"
すべての返信
-
何一つ試さずに書いています。間違っていたらすいません。
Googleカレンダーは最新とその前のバージョンしかサポートしないそうです。
https://support.google.com/calendar/bin/answer.py?hl=ja&answer=37057
いまのIEのバージョンがいくつかわからないのですが、サポートの終わったIEでアクセスしてるための
メッセージではないかと推測します。
で、WebBrowserで使っているブラウザのバージョンは
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.webbrowser.version.aspx
で調べられるみたいなので、まずそこが大丈夫か確認してみてはいかがでしょうか。 -
ユーザーエージェントの変更方法をググッた結果へっぽこSE奮闘記さんのページに辿り着き中に記述されているコードをコピペしてみたのですが・・・・
this.txtUserAgent.Text と this.ckBoxUaAdd.Checked がエラーになってしまっています。
何が悪いのでしょうか?
環境は、VisualStudio2012です。
using System.Runtime.InteropServices; public partial class Form1 : Form { [DllImport("urlmon.dll", CharSet = CharSet.Ansi)] private static extern int UrlMkSetSessionOption( int dwOption, string str, int nLength, int dwReserved); [DllImport("urlmon.dll", CharSet = CharSet.Ansi)] private static extern int UrlMkGetSessionOption(int dwOption, StringBuilder pBuffer, int dwBufferLength, ref int pdwBufferLength, int dwReserved); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { const int URLMON_OPTION_USERAGENT = 0x10000001; string ua = ""; //完全にUserAgentを書き換えるか、元のUserAgentに文字を付け加えるか if (this.ckBoxUaAdd.Checked) { //元のUserAgentを取得する。 StringBuilder userAgent = new StringBuilder(255); int returnLength = 0; int result = UrlMkGetSessionOption(URLMON_OPTION_USERAGENT, userAgent, userAgent.Capacity, ref returnLength, 0); //取得したUserAgentに文字を付け加える ua = userAgent.ToString() + this.txtUserAgent.Text; } else { ua = this.txtUserAgent.Text; } UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0); this.webBrowser1.Navigate(this.txtURL.Text); } }
-
> this.txtUserAgent.Text と this.ckBoxUaAdd.Checked がエラーになってしまっています。
これらはフォームにおいたコントロールのインスタンスです。
同じ名前でコントロールを置くか、ご自身の環境にあわせて変えてみてください。
とりあえず、私の環境で「https://www.google.com/calendar/」を呼び出してみたら
普通に表示できました。
環境 Windows7 PRO 32bit, webBrowser1.Version = "8.0.7601.17998"