none
webBrowser で Googleカレンダーの読み込みで RRS feed

  • 質問

  • お世話になります。

    ボタン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");
                }
            }
     
        }
    }


    2012年12月18日 8:41

回答

  • > this.txtUserAgent.Text と this.ckBoxUaAdd.Checked がエラーになってしまっています。
    これらはフォームにおいたコントロールのインスタンスです。
    同じ名前でコントロールを置くか、ご自身の環境にあわせて変えてみてください。

    とりあえず、私の環境で「https://www.google.com/calendar/」を呼び出してみたら
    普通に表示できました。
    環境 Windows7 PRO 32bit, webBrowser1.Version = "8.0.7601.17998"

    • 回答の候補に設定 佐伯玲 2012年12月27日 1:19
    • 回答としてマーク 佐伯玲 2013年1月11日 0:08
    2012年12月26日 6:04

すべての返信

  • 何一つ試さずに書いています。間違っていたらすいません。

    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
    で調べられるみたいなので、まずそこが大丈夫か確認してみてはいかがでしょうか。
    2012年12月18日 9:01
  • 返信ありがとうございます!なるほど・・・バージョンですかユーザーエージェント変えれば対応出来るのかなぁ・・・ C#始めて3日なのでそこまで出来るかはわかりませんが頑張って見ます 他にもこんな、アプローチ方法が有るのなら皆様よろしくお願いします。
    2012年12月18日 22:51
  • ユーザーエージェントの変更方法をググッた結果へっぽこ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);
     
    }
     
    }


    2012年12月21日 4:10
  • > this.txtUserAgent.Text と this.ckBoxUaAdd.Checked がエラーになってしまっています。
    これらはフォームにおいたコントロールのインスタンスです。
    同じ名前でコントロールを置くか、ご自身の環境にあわせて変えてみてください。

    とりあえず、私の環境で「https://www.google.com/calendar/」を呼び出してみたら
    普通に表示できました。
    環境 Windows7 PRO 32bit, webBrowser1.Version = "8.0.7601.17998"

    • 回答の候補に設定 佐伯玲 2012年12月27日 1:19
    • 回答としてマーク 佐伯玲 2013年1月11日 0:08
    2012年12月26日 6:04
  • よやく、完成しました!!

    本当にありがとうございます。

    2013年1月10日 6:43