コメントを残す


16

仕事:

この質問にコメントを残すプログラムを作成します。コンテンツはでなければなりません1234567890123456

編集:

  1. ユーザー名とパスワードを使用しUPいる場合は、ユーザー名とパスワードをそのままにしておくことができます。(該当する場合)

  2. URL Shortenersなし(該当する場合)

  3. ブラウザコンソールは使用できません。


27
...この課題の終わりに、あなたの受信トレイのスクリーンショットを投稿してください
マーティン・エンダー

1
コードをテストしている人に:コメントを送信した後に削除してください。このチャレンジに関するコメントが不必要に長くスパムにならないようにし、MODの仕事を楽にします。
メゴ

1
これが指定不足だと思う人は誰もいませんか?なんでそんなことするの?質問は自己完結型のものではありませんか?APIドキュメントへのリンクはどこにありますか?

4
@cat仕様がかなりまばらであることには同意しますが、それは言う必要のある全体が存在しないからだと思います。また、質問ではStack Exchange APIを使用する必要はないため、質問にAPIドキュメントを含めることはかなり不要です。
アレックスA.

3
既存の回答とコメントを見ると、これはa)許可された入力を明示的にホワイトリストに登録する必要があるように思えるので、不明確として閉じるために投票しますユーザー名とパスワードを使用してログインするという暗黙の要件の詳細とバイパス); b)「ユーザー名とパスワードをそれぞれUとPのままにしておく」の意味を明確にする(これは、「U」と「P」をハードコードするように指示するものと解釈しますが、他の人は明らかに異なって解釈します)。
ピーターテイラー

回答:


11

jQueryを使用したJavascript、127バイト

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

数バイトのIsmael Miguelとnicaelに感謝します。

fkeyパラメータは、あなたのアカウントに一意であり、StackExchangeページオープンで、ブラウザのローカルストレージの内容を調べることによって見つけることができます。このコードは、開いているStackExchangeセッションが存在するブラウザーで実行する必要があります。fkeyブラウザーのローカルストレージからパラメーターを自動的に読み込みます(この送信の以前のバージョンでは、手動で入力する必要がありました)。

残念ながら、このppcg.lolURLはPOSTリクエストを通過させないため使用できません。

楽しい事実:適切なfkey値なしでこのコードを実行しようとすると、HTTP 418応答が返されます。

急須

fkeyChromeで値を見つける方法の例:

fkey

どうやら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}))}

私はこれを書こうとしていた。スタックスニペットを追加してください。
-NoOneIsHere

セレンを使用する代わりに、リクエストを使用してサイトにアクセスする方法が気に入っています!
Meinkraft

1
@NoOneIsHereスタックスニペットは、ブラウザのCookie /セッションデータにアクセスせずにサンドボックスで実行されるため、使用できません。さらに、スタックスニペットがPOSTリクエストを許可するかどうかも定かではありません。
メゴ

3
@IsmaelMiguel Downvotingは、コード内の1文字の大文字を誤って見落としてしまったことは少しばかげているように思えますが、それはあなたの呼び出しです。現在修正されています。
Mego

2
@IsmaelMiguel Downvotingはちょっとした誤植のためです。
Mego

14

Safari付きAppleScript、269 287バイト

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でこれを行うことができましたが、チャレンジのアイデアに忠実であるとは思いませんでした


2
こんにちは、PPCGへようこそ!これは素晴らしい!それは不正行為ではありません。また、すべての JavaScript回答に対してJSを有効にする必要があります。
-NoOneIsHere

PPCGへようこそ!これは確かに創造的な答えですが、ユーザー名とパスワードを入力として受け取らないため、自己完結型ではありません。
パトリックロバーツ

1
@Sirens答えてくれてありがとう。質問を編集したばかりなので、URL Shortenersを使用できませんか?
Meinkraft

1
動作していないようです...つまり、コメントリンクではなく、フラグリンクをクリックしています。
ニカエル

1
OPは、URL短縮サービスを許可しないようにチャレンジを変更しました。これにより、ppcg.lolをcodegolf.stackexchange.comと交換するまで、この回答が無効になります。
アレックスA.

7

Python 3.5、Selenium Webdriver、485 427 469 461 449 414 403 403バイト:

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)


Selenium Webdriverを紹介してくれてありがとう。
マルティセン

@Maltysen問題ありません。:)
R. Kap

Chromeより短いですFirefoxか?
Rɪᴋᴇʀ

@EᴀsᴛᴇʀʟʏIʀᴋまあ、以前はWebdriverで動作させることができませんでした。私は最終的に持っていますが、私の解決策は11バイト短くなりました!:D
R. Kap

2

iOSのSwift 2.2、380バイト

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のテスト可能な回答でこれを更新する場合があります。


6
stringByEvaluatingJavaScriptFromString素晴らしい


2
私は今怒っています。私は...より多くの私よりObejctive-Cを憎むことができたとは思いませんでした

0

Selenium Webdriverを備えたJava 8、684バイト:

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つの間にスペースが必要な形式になります。


あなたがここに持っているコードは684より長いです、ハハ
ポケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.