2014-10-27 6 views
6

Ich versuche, ein Bild und Text auf Facebook-Seite mit Webbrowser-Steuerelement zu posten.kann kein Bild im FB-Post veröffentlichen. Diese Statusaktualisierung scheint leer zu sein. Bitte schreiben Sie etwas oder hängen Sie einen Link oder ein Foto an, um Ihren Status zu aktualisieren

Ich füge eine URL in Textbereich ein, wenn es die Miniaturansicht erhält, sende ich Schlüssel (ctrl + A). Und dann den Text über Nachricht senden keys.Send(...) Alles bis Klick Post-Taste funktioniert gut es gibt Fehler

"This status update appears to be blank. Please write something or attach a link or photo to update your status." 

Ich habe versucht, alle Attribute von Textarea zu setzen, wie Titel, inneren Text und Platzhalter, und ich bin sicher, Der Textbereich ist auch nicht null.

HtmlElement elementTextArea = null; 
HtmlElementCollection elemss = webBrowser1.Document.GetElementsByTagName("textarea"); 
foreach (HtmlElement elem in elemss) 
{ 
    if (elem.GetAttribute("name") == "xhpc_message") 
    { 
     elementTextArea = elem; 
     break; 
    } 
} 
elementTextArea.Focus(); 
Print("\nSet Focused\n"); 

SendText(url); 

webBrowser1.Update(); 
DoWait(4); 

SendText("^(a)"); 
SendText(text); 
webBrowser1.Update(); 

elementTextArea = webBrowser1.Document.GetElementById(id); 

elementTextArea.InnerText += "\nINNER TEXT"; 
Print("\nAdded Inner Text ABCD\n"); 

//elementTextArea.SetAttribute("placeholder", text + "PLACEHOLDER"); 
//Print("\nAdded place holder text abcd \n"); 

/*    
HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("input"); 
foreach (HtmlElement elem in elems) 
{ 
    if (elem.GetAttribute("className").Equals("mentionsHidden")) 
    { 
     Print("\nAdded Second Text\n"); 
     elem.SetAttribute("value", text+""); 
     break; 
    } 
} 
*/ 

DoWait(3); 

HtmlElementCollection elements = webBrowser1.Document.GetElementsByTagName("button"); 
foreach (HtmlElement element in elements) 
{ 
    if (element.GetAttribute("className") == "_42ft _4jy0 _11b _4jy3 _4jy1 selected _51sy") 
    { 
     Print("\nPost Button Found\n"); 
     element.Focus(); 

     Print("\nFocus1\n"); 

     DoWait(2); 

     SendText("~"); 

     element.InvokeMember("click"); 

     Print("\nClicked1\n"); 

Bitte helfen Sie mir, es hat so viel Zeit in Anspruch genommen.

+0

Haben Sie versucht, Tastatureingaben zu simulieren? Ich schätze, aber es könnte sein, FB überprüft Ihre Eingabe (für URLs etc.) und die Überprüfung schlägt fehl, wenn Sie es einfach "normal" hinzufügen –

Antwort

1

Wenn ein Beitrag eingereicht wird, enthält es unter anderen Variablen, diese:

clp:{"cl_impid":"eeeeeeee","clearcounter":0,"elementid":"v_1_2n","version":"x","parent_fbid":1000000000000} 
xhpc_message_text: 
xhpc_message: 

Wenn Sie den Quellcode der Seite zu sehen, über das _text Feld ein verstecktes Feld unter dem Textfeld ist, das zu reflektieren scheint der gleiche Wert. Und wenn der Textbereich anfänglich angeklickt wird, wird auch clp als ein verstecktes Feld angepasst.

Sie müssen jedes übergebene Feld exakt replizieren, die Sitzung klonen und dann hoffen, dass sie den Inhalt nicht ändern, indem Sie ein Feld umbenennen oder, noch schlimmer, einen anderen hinzufügen, dessen Name auf einer eindeutigen ID basiert und zufällig platziert wird im Code.

Kurz gesagt, los geht's, aber vielleicht möchten Sie ihre API sogar mit dem dummen "Ich bin dein Daddy" in Betracht ziehen, Regeln, die sie jetzt für Berechtigungen haben ... es kann Ihnen einiges ersparen ernsthafte Kopfschmerzen!