仕事:
この質問にコメントを残すプログラムを作成します。コンテンツはでなければなりません1234567890123456
。
編集:
ユーザー名とパスワードを使用し
U
てP
いる場合は、ユーザー名とパスワードをそのままにしておくことができます。(該当する場合)URL Shortenersなし(該当する場合)
ブラウザコンソールは使用できません。
仕事:
この質問にコメントを残すプログラムを作成します。コンテンツはでなければなりません1234567890123456
。
編集:
ユーザー名とパスワードを使用しU
てP
いる場合は、ユーザー名とパスワードをそのままにしておくことができます。(該当する場合)
URL Shortenersなし(該当する場合)
ブラウザコンソールは使用できません。
回答:
$.post("//codegolf.stackexchange.com/posts/84546/comments",{comment:"1234567890123456",fkey:StackExchange.options.user.fkey})
数バイトのIsmael Miguelとnicaelに感謝します。
fkey
パラメータは、あなたのアカウントに一意であり、StackExchangeページオープンで、ブラウザのローカルストレージの内容を調べることによって見つけることができます。このコードは、開いているStackExchangeセッションが存在するブラウザーで実行する必要があります。fkey
ブラウザーのローカルストレージからパラメーターを自動的に読み込みます(この送信の以前のバージョンでは、手動で入力する必要がありました)。
残念ながら、このppcg.lol
URLはPOSTリクエストを通過させないため使用できません。
楽しい事実:適切なfkey
値なしでこのコードを実行しようとすると、HTTP 418応答が返されます。
fkey
Chromeで値を見つける方法の例:
どうやらWinterbashのものはまだ保存されています。きちんとした。
参考までに、バニラJavascriptの同じものは314バイトになります(いくつかのバイトをオフにしてくれたIsmael Miguelとnicaelに感謝します)。
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}))}
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
これを使用するには、Safari開発者設定を有効にしてから有効にする必要がありますAllow JavaScript from Apple Events
。既存のキーチェーン+ Cookieを使用するのが不正行為かどうかはわかりませんが、そうです。
また、クリックとキーストロークを自動化するだけでOSXのAutomatorでこれを行うことができましたが、チャレンジのアイデアに忠実であるとは思いませんでした
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()
シンプルなPythonセレンWebドライバーソリューションを利用した完全なプログラム。Chromeで動作しますが、動作させるにはChromeDriverをインストールする必要があります。名前を変更することで動作U
し、P
それぞれのユーザーのスタック交換のメールアドレスとパスワードに。ただし、ChromeDriverのインストールに問題がある場合は、上記のソリューションとまったく同じ方法で実行され、ドライバーを必要としないFireFoxソリューションを以下に示します。ただし、現在は414 404バイトで1バイト長くなっています。
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()
また、関数が必要な場合は、現在513 455 497 489 477 449 431バイトであり、ブラウザーとしてChromeを使用している匿名のラムダ関数を使用するソリューションがあります。
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())
ただし、ChromeDriverに関する問題がある場合は、同じタイプの解決策がありますが、今回は442 432バイトの Firefoxを使用しています。
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())
これらのラムダ関数を呼び出すには、関数の名前を有効なものに変更し、通常の関数のように電子メールとパスワードで呼び出します。たとえば、関数の名前H
がの場合、次のように呼び出しますH(Email, Password)
。
Chrome
より短いですFirefox
か?
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()
ユーザーがSafariでCode Golfにログインし、Cookieが有効になっていると仮定します。また、UIKitが暗黙的にインポートされ、使用可能であると想定しています。CocoaではJSONのシリアル化は非常に冗長です。Swift3ソリューションとオプションでmacOS / Linuxのテスト可能な回答でこれを更新する場合があります。
stringByEvaluatingJavaScriptFromString
素晴らしい
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());}}
Pythonでの 2番目の完全なプログラム回答のJava 8での直接適応。Firefoxで完全に動作し、プログラムの起動時にすぐにスペースで区切られた電子メールとパスワードの入力を要求します。つまり、入力はEmail Password
、2つの間にスペースが必要な形式になります。