私はFacebookのAPIを使用して友達からデータを取得するためのデスクトップアプリケーションを構築しようとしています。 とにかく私はログインの段階で立ち往生しています。 私はいくつかのアドバイスを使い、WebBrowserでFacebookにログインしました。それは素晴らしい作品です。 は、私はそれがfacebook desktop app C#
私はbutton_1方法if (!w.DocumentText.Contains(@"<div class=""linkWrap noCount"">Messages</div>"))
{
w.Navigate(@"http://www.facebook.com/login.php");
MessageBox.Show("Login error. Wrong username or password!");
}
else
{
MessageBox.Show("Logged in successfully");
}
<のdivクラスの最後に、このようにそれをやってみました
=「」linkWrap NOCOUNT」私のステータス=失敗や成功を与えるようにしようで立ち往生しています">メッセージ</div>は、ログインしている間のみ表示されるので、ユーザがログインしているかどうかを確認するために使用されます。
しかし、問題は、常にブラウザがそのページにナビゲートする前に、私はスレッドとスレッドの睡眠やタイマーを試みたが、それdoesntは動作するように見える
アイデア?
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(WorkThreadFunction));
thread.Start();
string email = textBox1.Text;
string password = textBox2.Text;
// create a new browser
WebBrowser w = new WebBrowser();
w.Dock = DockStyle.Fill;
this.Controls.Add(w); // you may add the controll to your windows forms if you want to see what is going on
// latter you may not chose to add the browser or you can even set it to invisible...
// navigate to facebook
w.Navigate(@"http://www.facebook.com/login.php");
// wait a little
for (int i = 0; i < 100; i++)
{
System.Threading.Thread.Sleep(10);
System.Windows.Forms.Application.DoEvents();
}
HtmlElement temp=null;
// while we find an element by id named email
while (temp == null)
{
temp = w.Document.GetElementById("email");
System.Threading.Thread.Sleep(10);
System.Windows.Forms.Application.DoEvents();
}
// once we find it place the value
temp.SetAttribute("value", email);
temp = null;
// wiat till element with id pass exists
while (temp == null)
{
temp = w.Document.GetElementById("pass");
System.Threading.Thread.Sleep(10);
System.Windows.Forms.Application.DoEvents();
}
// once it exist set its value equal to passowrd
temp.SetAttribute("value", password);
// if you already found the last fields the button should also be there...
var inputs = w.Document.GetElementsByTagName("input");
int counter = 0;
bool enableClick = false;
// iterate through all the inputs in the document
foreach (HtmlElement btn in inputs)
{
try
{
var att = btn.GetAttribute("tabindex");
var name = btn.GetAttribute("id");
if (enableClick)// button to submit always has a differnt id. it should be after password textbox
{
btn.InvokeMember("click");
counter++;
}
if (name.ToUpper().Contains("PASS") || att=="4")
{
enableClick = true; // button should be next to the password input
}
// try a max of 5 times
if (counter > 5)
{
break;
}
}
catch
{
}
}
}
これは理論的に質問に答えるかもしれませんが、答えの本質的な部分を含め、参照のためのリンクを提供することが望ましいでしょう(http://meta.stackexchange.com/q/8259)。 – Lix
このSDKは通常のユーザーとしてログインしませんが、アプリIDを持っていて必要なものではありません。ありがとうございました – Zbone
Facebookのアプリケーションを作成して接続に使用できます。これは簡単なプロセスで、アプリなしでFacebookのログインができるかどうかはわかりません。 SDKを使用してFacebookにログインするときは、アプリケーションとしてのアクセス許可を要求する必要があります。 –