Hinterlasse einen Kommentar


16

Aufgabe:

Machen Sie ein Programm, das einen Kommentar zu dieser Frage hinterlässt. Der Inhalt sollte sein 1234567890123456.

Bearbeitungen:

  1. Sie können Ihre Benutzernamen und Passwörter wie verlassen Uund Pwenn Sie Benutzernamen und Passwort verwenden. (wenn anwendbar)

  2. Keine URL-Kürzungen (falls zutreffend)

  3. Sie dürfen die Browserkonsole nicht verwenden.


27
Bitte poste einen Screenshot deines Posteingangs am Ende dieser Challenge ...
Martin Ender

1
Für die Leute, die ihren Code testen: Bitte löschen Sie Ihre Kommentare, nachdem Sie sie eingereicht haben, um zu verhindern, dass die Kommentare zu dieser Herausforderung unnötig lang und spammig werden, und um die Arbeit der Mods zu erleichtern.
Mego

1
Glaubt sonst niemand, dass dies unterbestimmt ist? Wie zum Teufel mache ich das? Sollen Fragen nicht in sich geschlossen sein? Wo ist der Link zu den API-Dokumenten?
Katze

4
@cat Ich stimme zwar zu, dass die Spezifikationen eher spärlich sind, aber ich denke, es liegt daran, dass nicht alles gesagt werden muss. Beachten Sie außerdem, dass die Verwendung der Stack Exchange-API für die Frage nicht erforderlich ist. Daher wäre es ziemlich überflüssig, API-Dokumente in die Frage aufzunehmen.
Alex A.

3
Als unklar abschließen zu wollen, weil ich mir die vorhandenen Antworten und Kommentare anschaue, scheint mir, dass dies a) erforderlich ist, um die zulässigen Eingaben explizit auf die weiße Liste zu setzen (beim einfachen Lesen dürfen Antworten keine Eingaben annehmen, aber einige scheinen Auth zu nehmen Details und Umgehung der impliziten Verpflichtung, sich mit Benutzername und Passwort anzumelden); b) um klarzustellen, was unter " Sie dürfen Ihre Benutzernamen und Passwörter als U bzw. P belassen" zu verstehen ist (was ich so interpretieren würde, als ob wir "U" und "P" fest codieren müssten, was andere jedoch eindeutig anders interpretiert haben).
Peter Taylor

Antworten:


11

Javascript mit jQuery, 127 Bytes

$.post("//codegolf.stackexchange.com/posts/84546/comments",{comment:"12345678901‌​23456",fkey:StackExchange.options.user.fkey})

Danke an Ismael Miguel und nicael für ein paar Bytes.

Der fkeyParameter ist für Ihr Konto eindeutig und kann ermittelt werden, indem der lokale Speicherinhalt Ihres Browsers bei geöffneter StackExchange-Seite überprüft wird. Dieser Code muss in einem Browser ausgeführt werden, in dem eine offene StackExchange-Sitzung vorhanden ist. Der fkeyParameter wird automatisch aus dem lokalen Speicher des Browsers geladen (frühere Versionen dieser Übermittlung erforderten die manuelle Eingabe).

Leider kann die ppcg.lolURL nicht verwendet werden, da POST-Anforderungen nicht weitergeleitet werden.

Unterhaltsame Tatsache: Wenn Sie versuchen, diesen Code ohne den richtigen fkeyWert auszuführen , erhalten Sie eine HTTP 418- Antwort:

Teekanne

Beispiel, wie Sie den fkeyWert in Chrome finden:

fkey

Anscheinend wird Winterbash-Zeug immer noch aufbewahrt. Ordentlich.

Als Referenz wäre dasselbe in Vanille-Javascript 314 Bytes (nochmals danke an Ismael Miguel und nicael für ein paar Bytes):

with(new XMLHttpRequest()){
open("POST","//codegolf.stackexchange.com/posts/84546/comments",1)
setRequestHeader("Content-type","application/x-www-form-urlencoded")
setRequestHeader("Content-length",62)
setRequestHeader("Connection","close")
send("comment=1234567890123456&fkey="+StackExchange.options.user.fkey}))}

Ich wollte das gerade schreiben. Bitte fügen Sie ein Stack-Snippet hinzu.
NoOneIsHere

Mir gefällt, wie Sie die Anfrage verwenden, um auf die Website zuzugreifen, anstatt Selen zu verwenden!
Meinkraft

1
@NoOneIsHere Ein Stack-Snippet ist nicht möglich, da sie ohne Zugriff auf die Cookie- / Sitzungsdaten des Browsers in einer Sandbox ausgeführt werden. Außerdem bin ich mir nicht sicher, ob Stack-Snippets überhaupt POST-Anforderungen zulassen.
Mego

3
@IsmaelMiguel Ein Abstimmungsergebnis zu verfehlen, weil versehentlich die Groß- und Kleinschreibung eines Buchstabens im Code fehlt, scheint ein bisschen lächerlich, aber das ist Ihr Anruf. Es ist jetzt behoben.
Mego

2
@IsmaelMiguel Downvoting wegen eines leichten Tippfehlers ist.
Mego

14

AppleScript mit Safari, 269 287 Byte

tell application "Safari"
activate
tell window 1
set current tab to (make new tab with properties {URL:"http://codegolf.stackexchange.com/q/84546"})
delay 5
do JavaScript "$('a')[66].click();$('textarea')[0].val('1234567890123456');$('input')[5].click()" in current tab
end tell
end tell

Um dies zu verwenden, müssen Sie die Safari Developer-Einstellungen aktivieren und anschließend aktivieren Allow JavaScript from Apple Events. Ich bin mir nicht sicher, ob es betrügt oder nicht, die vorhandenen Schlüsselbund + Cookies zu verwenden, aber na ja.

Ich habe es auch im Automator von OSX geschafft, indem ich nur die Klicks und Tastenanschläge automatisiert habe, aber ich dachte nicht, dass es der Idee der Herausforderung treu geblieben ist


2
Hallo und willkommen bei PPCG! Das ist toll! Das ist kein Betrug. Sie müssen JS auch für alle JavaScript-Antworten aktivieren .
NoOneIsHere

Willkommen bei PPCG! Dies ist sicherlich eine kreative Antwort, ist jedoch nicht in sich geschlossen, da Benutzername und Passwort nicht als Eingabe verwendet werden.
Patrick Roberts

1
@ Sirens Danke für die Antwort. Ich habe die Frage gerade bearbeitet. Können Sie also keine URL-Shortener verwenden?
Meinkraft

1
Es scheint nicht zu funktionieren ... Ich meine, es klickt auf den Flag-Link, nicht auf den Kommentar-Link.
Nicael

1
Das OP hat die Abfrage dahingehend geändert, dass URL-Kürzungen nicht zugelassen werden. Dadurch wird diese Antwort ungültig, bis Sie ppcg.lol gegen codegolf.stackexchange.com austauschen.
Alex A.

7

Python 3.5 mit Selenium Webdriver, 485 427 469 461 449 414 403 Byte:

from selenium.webdriver import*;import time;D=Chrome();I=lambda k:D.find_element_by_name(k);C='comment';D.get('http://www.codegolf.stackexchange.com/users/login');I('email').send_keys(U);Z=I('password');Z.send_keys(P);Z.submit();D.get('http://www.codegolf.stackexchange.com/questions/84546');D.find_element_by_link_text('add a '+C).click();E=I(C);E.send_keys('1234567890123456');time.sleep(1);E.submit()

Ein vollständiges Programm, das eine einfache Python-Selen-Webtreiber-Lösung verwendet. Funktioniert in Chrome, obwohl ChromeDriver installiert sein muss, um zu funktionieren. Funktioniert durch Umbenennen Uund Pauf den Stapel Exchange - E - Mail und Passwort des Benutzers auf. Wenn es jedoch Probleme bei der Installation von ChromeDriver gibt, wird eine FireFox-Lösung auf die gleiche Weise wie die oben beschriebene ausgeführt und benötigt keine Treiber, obwohl sie bei 414.440 Byte derzeit 1 Byte länger ist :

from selenium.webdriver import*;import time;D=Firefox();I=lambda k:D.find_element_by_name(k);C='comment';D.get('http://www.codegolf.stackexchange.com/users/login');I('email').send_keys(U);Z=I('password');Z.send_keys(P);Z.submit();D.get('http://www.codegolf.stackexchange.com/questions/84546');D.find_element_by_link_text('add a '+C).click();E=I(C);E.send_keys('1234567890123456');time.sleep(1);E.submit()

Wenn eine Funktion gewünscht wird, finden Sie hier eine Lösung mit einer anonymen Lambda-Funktion, die derzeit 513 455 497 489 477 449 431 Byte umfasst und Chrome als Browser verwendet.

lambda U,P:exec("from selenium.webdriver import*;import time;D=Chrome();I=lambda k:D.find_element_by_name(k);C='comment';D.get('http://www.codegolf.stackexchange.com/users/login');I('email').send_keys(U);Z=I('password');Z.send_keys(P);Z.submit();D.get('http://www.codegolf.stackexchange.com/questions/84546');D.find_element_by_link_text('add a '+C).click();E=I(C);E.send_keys('1234567890123456');time.sleep(1);E.submit()",locals())

Wenn es jedoch erneut Probleme mit ChromeDriver gibt, handelt es sich um dieselbe Art von Lösung, diesmal jedoch mit Firefox, der derzeit 442 432 Byte umfasst :

lambda U,P:exec("from selenium.webdriver import*;import time;D=Firefox();I=lambda k:D.find_element_by_name(k);C='comment';D.get('http://www.codegolf.stackexchange.com/users/login');I('email').send_keys(U);Z=I('password');Z.send_keys(P);Z.submit();D.get('http://www.codegolf.stackexchange.com/questions/84546');D.find_element_by_link_text('add a '+C).click();E=I(C);E.send_keys('1234567890123456');time.sleep(1);E.submit()",locals())

Sie rufen diese Lambda-Funktionen auf, indem Sie die Funktion einfach in irgendetwas Gültiges umbenennen und dann wie eine normale Funktion mit Ihrer E-Mail-Adresse und Ihrem Passwort aufrufen. Wenn die Funktion beispielsweise benannt wäre H, würden Sie sie wie folgt aufrufen H(Email, Password).


Vielen Dank, dass Sie mich mit Selenium Webdriver bekannt gemacht haben.
Maltysen

@Maltysen Kein Problem. :)
R. Kap

Chromeist kürzer als Firefox?
6.

@ EᴀsᴀIᴛᴇʀʟʏ Naja, ich konnte es vorher nicht mit Webdriver zum Laufen bringen. Ich habe es endlich geschafft und meine Lösung ist jetzt 11 Bytes kürzer! : D
R. Kap

2

Swift 2.2 unter iOS, 380 Bytes

let r = NSMutableURLRequest(URL:NSURL(string:"http://codegolf.stackexchange.com/posts/84546/comments")!)
r.HTTPMethod = "POST"
r.HTTPBody = try!NSJSONSerialization.dataWithJSONObject(["comment":"1234567890123456","fkey":UIWebView().stringByEvaluatingJavaScriptFromString("localstorage.getItem('se:fkey')")!],options:[])
NSURLSession.sharedSession().dataTaskWithRequest(r).resume()

Es wird davon ausgegangen, dass der Benutzer bei Code Golf with Safari angemeldet ist und Cookies aktiviert hat. Vorausgesetzt, UIKit ist implizit importiert und verfügbar. Die JSON-Serialisierung ist in Cocoa so ausführlich ... Könnte dies mit einer Swift 3-Lösung und optional unter MacOS / Linux testbaren Antworten aktualisieren.


6
stringByEvaluatingJavaScriptFromStringBrillant
Katze

1
JAL

2
Jetzt bin ich sauer. Ich hätte nicht gedacht, dass es möglich ist, Obejctive-C mehr zu hassen als ich ...
cat

0

Java 8 mit Selenium Webdriver, 684 Bytes:

import java.util.*;import org.openqa.selenium.*;import org.openqa.selenium.firefox.*;class Leave_a_Comment_PPCG_Challenge_Golfed_Version_1{static void Y(String U,String P){WebDriver D=new FirefoxDriver();D.get("http://www.codegolf.stackexchange.com/users/login");D.findElement(By.name("email")).sendKeys(U);WebElement Z=D.findElement(By.name("password"));Z.sendKeys(P);Z.submit();D.get("http://www.codegolf.stackexchange.com/questions/84546");D.findElement(By.linkText("add a comment")).click();WebElement V=D.findElement(By.name("comment"));V.sendKeys("1234567890123456");D.findElement(By.xpath("//input[@value='Add Comment']")).click();}public static void main(String[]a){Scanner I=new Scanner(System.in);Y(I.next(),I.next());}}

Eine direkte Anpassung in Java 8 meiner zweiten vollständigen Programmantwort in Python . Funktioniert perfekt in Firefox und fragt beim Programmstart sofort nach einer durch Leerzeichen getrennten E-Mail- und Passworteingabe. Mit anderen Worten, die Eingabe erfolgt in dem Format, Email Passwordin dem der Abstand zwischen den beiden benötigt wird.


Der Code, den Sie hier haben, ist länger als 684, haha
Poke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.