ทิ้งข้อความไว้


16

งาน:

ทำโปรแกรมที่แสดงความคิดเห็นในคำถามนี้ 1234567890123456เนื้อหาที่ควรจะ

การแก้ไข:

  1. คุณสามารถออกจากชื่อผู้ใช้และรหัสผ่านของคุณเป็นUและPถ้าคุณใช้ชื่อผู้ใช้และรหัสผ่าน (ถ้ามี)

  2. ไม่มีตัวย่อ URL (ถ้ามี)

  3. คุณไม่สามารถใช้คอนโซลเบราว์เซอร์


27
โปรดโพสต์ภาพหน้าจอของกล่องจดหมายของคุณเมื่อสิ้นสุดความท้าทายนี้ ...
Martin Ender

1
สำหรับผู้ที่กำลังทดสอบรหัสของพวกเขา: โปรดลบความคิดเห็นของคุณหลังจากที่คุณส่งพวกเขาเพื่อป้องกันไม่ให้ความคิดเห็นเกี่ยวกับความท้าทายนี้ทำให้เกิดความยาวและสแปมโดยไม่จำเป็นและเพื่อให้งานของ mods ง่ายขึ้น
Mego

1
ไม่มีใครคิดว่านี่เป็นสิ่งที่ไม่ได้ระบุไว้หรือไม่? ฉันจะทำยังไงดี คำถามไม่ได้อยู่ในตัวเองใช่ไหม ลิงก์ไปยังเอกสาร API อยู่ที่ไหน
แมว

4
@cat ในขณะที่ฉันยอมรับว่าข้อกำหนดค่อนข้างกระจัดกระจายฉันคิดว่าเป็นเพราะมีเพียงไม่ทั้งหมดที่จะต้องพูด นอกจากนี้โปรดทราบว่าคำถามนี้ไม่จำเป็นต้องใช้ Stack Exchange API ดังนั้นการรวม API เอกสารในคำถามจะค่อนข้างไม่จำเป็น
Alex A.

3
การลงคะแนนใกล้จะไม่ชัดเจนเนื่องจากการดูคำตอบและความคิดเห็นที่มีอยู่ฉันคิดว่าสิ่งนี้จำเป็นต้องมี) เพื่อให้ขาว - รายการอินพุตที่อนุญาตอย่างชัดเจน (บนคำตอบการอ่านธรรมดาอาจไม่มีการป้อนข้อมูล แต่บางคนดูเหมือนว่า รายละเอียดและการข้ามข้อกำหนดโดยนัยในการใช้ชื่อผู้ใช้และรหัสผ่านเพื่อเข้าสู่ระบบ); b) เพื่อชี้แจงความหมายของ " คุณอาจปล่อยให้ชื่อผู้ใช้และรหัสผ่านเป็น U และ P ตามลำดับ " (ซึ่งฉันจะตีความว่าเป็นการบอกให้เราใส่รหัส "U" และ "P" แต่คนอื่นตีความแตกต่างกันอย่างชัดเจน)
Peter Taylor

คำตอบ:


11

Javascript กับ jQuery, 127 ไบต์

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

ขอบคุณ Ismael Miguel และ nicael สักสองสามไบต์

fkeyพารามิเตอร์ที่ไม่ซ้ำกันในบัญชีของคุณและสามารถพบได้โดยการตรวจสอบเนื้อหาการจัดเก็บในท้องถิ่นของเบราว์เซอร์ของคุณด้วยการเปิดหน้า StackExchange รหัสนี้จะต้องทำงานในเบราว์เซอร์ที่มีเซสชัน StackExchange เปิดอยู่ โดยจะโหลดfkeyพารามิเตอร์จากที่เก็บข้อมูลภายในเบราว์เซอร์โดยอัตโนมัติ(เวอร์ชันก่อนหน้าของการส่งนี้จำเป็นต้องป้อนข้อมูลด้วยตนเอง)

น่าเสียดายที่ppcg.lolไม่สามารถใช้ URL ได้เนื่องจากไม่ผ่านคำขอ POST ผ่าน

ข้อเท็จจริงที่น่าสนุก: หากคุณพยายามเรียกใช้รหัสนี้โดยไม่มีfkeyค่าที่เหมาะสมคุณจะได้รับการตอบกลับHTTP 418 :

teapot

ตัวอย่างวิธีหาfkeyค่าใน Chrome:

fkey

สิ่งที่ชัดเจนว่า Winterbash ยังคงถูกจัดเก็บอยู่ เรียบร้อย

สำหรับการอ้างอิงสิ่งเดียวกันใน vanilla 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}))}

ฉันกำลังจะเขียนสิ่งนี้ โปรดเพิ่มกองย่อย
NoOne อยู่ที่นี่

ฉันชอบวิธีที่คุณใช้การร้องขอเพื่อเข้าถึงไซต์แทนที่จะใช้ซีลีเนียม!
Meinkraft

1
@NoOneIsHere เป็นไปไม่ได้เพราะเป็นส่วนย่อยเพราะมันทำงานแบบแซนด์บ็อกซ์โดยไม่ต้องเข้าถึงข้อมูลคุกกี้ / เซสชันของเบราว์เซอร์ นอกจากนี้ฉันไม่แน่ใจว่า Stack Snippets อนุญาตคำขอ POST ได้เลย
Mego

3
@IsmaelMiguel Downvoting ที่ไม่ได้ตั้งใจใช้อักษรตัวใหญ่ในรหัสตัวอักษรดูเหมือนจะไร้สาระ แต่นั่นคือการโทรของคุณ ตอนนี้ได้รับการแก้ไขแล้ว
Mego

2
@IsmaelMiguel Downvoting เนื่องจากการพิมพ์ผิดเล็กน้อยคือ
Mego

14

AppleScript กับ Safari, 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และเปิดใช้งานแล้ว ฉันไม่แน่ใจว่ามันเป็นการโกงหรือไม่ที่จะใช้ keychain + cookie ที่มีอยู่ แต่ก็ดี

ฉันยังสามารถทำสิ่งนี้ได้ใน Automator ของ OSX โดยเพียงแค่คลิกและกดปุ่มอัตโนมัติ แต่ฉันไม่คิดว่ามันจะเป็นจริงกับแนวคิดของความท้าทาย


2
สวัสดีและยินดีต้อนรับสู่ PPCG! มันเยี่ยมมาก! นั่นไม่ใช่การโกง คุณต้องเปิดใช้งาน JS สำหรับคำตอบ JavaScript ทั้งหมด
NoOne อยู่ที่นี่

ยินดีต้อนรับสู่ PPCG! แม้ว่านี่จะเป็นคำตอบที่สร้างสรรค์ แต่ก็ไม่ได้มีอยู่ในตัวเองเนื่องจากไม่ได้ใช้ชื่อผู้ใช้และรหัสผ่านเป็นอินพุต
Patrick Roberts

1
@ Sirens ขอบคุณสำหรับคำตอบ ฉันเพิ่งแก้ไขคำถามดังนั้นคุณจะไม่สามารถใช้เครื่องมือย่อ URL ได้หรือไม่
Meinkraft

1
ดูเหมือนจะใช้งานไม่ได้ ... ฉันหมายถึงมันคลิกลิงค์ตั้งค่า
nicael

1
OP แก้ไขความท้าทายในการไม่อนุญาตตัวย่อ URL ซึ่งทำให้คำตอบนี้เป็นโมฆะจนกว่าคุณจะแลกเปลี่ยน ppcg.lol สำหรับ codegolf.stackexchange.com
Alex A.

7

Python 3.5 พร้อมซีลีเนียม Webdriver, 485 427 469 461 449 414 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 selenium web driver อย่างง่าย ใช้งานได้ใน Chrome แม้ว่าจะต้องติดตั้งChromeDriverเพื่อให้ทำงานได้ ทำงานโดยการเปลี่ยนชื่อUและเปลี่ยนPเป็นอีเมลและรหัสผ่าน Stack Exchange ของผู้ใช้ตามลำดับ อย่างไรก็ตามหากมีปัญหาใด ๆ ในการติดตั้ง ChromeDriver นี่คือโซลูชัน FireFox ที่ได้รับการดำเนินการในลักษณะเดียวกับวิธีการแก้ปัญหาข้างต้นและไม่ต้องการไดรเวอร์ใด ๆ ถึงแม้ว่าในปัจจุบันจะมีความยาว 1 ไบต์ที่414 404 ไบต์ :

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 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 นี่เป็นวิธีการแก้ปัญหาชนิดเดียวกัน แต่เวลานี้โดยใช้ Firefox ปัจจุบันมีขนาด442 432 ไบต์ :

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

@Maltysen ไม่มีปัญหา :)
R. Kap

Chromeสั้นกว่าFirefoxไหม
Rɪᴋᴇʀ

@ ใช่ฉันไม่สามารถทำงานกับ Webdriver ได้ก่อน ในที่สุดฉันก็มีและวิธีแก้ปัญหาของฉันก็สั้นลง 11 ไบต์! : D
R. Kap

2

Swift 2.2 บน iOS ขนาด 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()

สมมติว่าผู้ใช้ลงชื่อเข้าใช้ Code Golf ด้วย Safari และเปิดใช้งานคุกกี้ ยังถือว่า UIKit ถูกนำเข้าและพร้อมใช้งานโดยปริยาย การทำให้เป็นอันดับ JSON นั้นละเอียดมากใน Cocoa ... อาจอัปเดตสิ่งนี้ด้วยโซลูชัน Swift 3 และคำตอบที่ทดสอบได้สำหรับ macOS / Linux


6
stringByEvaluatingJavaScriptFromStringยอดเยี่ยม
แมว

1
@cat มันจะดีขึ้น
JAL

2
ตอนนี้ฉันโกรธ ฉันไม่คิดว่ามันเป็นไปได้ที่จะเกลียด Obejctive-C มากกว่าที่ฉันทำ ...
แมว

0

Java 8 พร้อม Selenium Webdriver ขนาด 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());}}

ที่ดัดแปลงมาโดยตรงในชวา 8 ของสองคำตอบโปรแกรมเต็มรูปแบบของฉันในหลาม ทำงานได้อย่างสมบูรณ์แบบใน Firefox และขอพื้นที่สำหรับแยกอีเมลและรหัสผ่านทันทีเมื่อโปรแกรมเริ่มทำงาน กล่าวอีกนัยหนึ่งอินพุตอยู่ในรูปแบบEmail Passwordที่ต้องการพื้นที่ว่างระหว่างทั้งสอง


รหัสที่คุณมีที่นี่ยาวกว่า 684 ฮ่าฮ่า
Poke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.