งาน:
ทำโปรแกรมที่แสดงความคิดเห็นในคำถามนี้ 1234567890123456
เนื้อหาที่ควรจะ
การแก้ไข:
คุณสามารถออกจากชื่อผู้ใช้และรหัสผ่านของคุณเป็น
U
และP
ถ้าคุณใช้ชื่อผู้ใช้และรหัสผ่าน (ถ้ามี)ไม่มีตัวย่อ URL (ถ้ามี)
คุณไม่สามารถใช้คอนโซลเบราว์เซอร์
งาน:
ทำโปรแกรมที่แสดงความคิดเห็นในคำถามนี้ 1234567890123456
เนื้อหาที่ควรจะ
การแก้ไข:
คุณสามารถออกจากชื่อผู้ใช้และรหัสผ่านของคุณเป็นU
และP
ถ้าคุณใช้ชื่อผู้ใช้และรหัสผ่าน (ถ้ามี)
ไม่มีตัวย่อ URL (ถ้ามี)
คุณไม่สามารถใช้คอนโซลเบราว์เซอร์
คำตอบ:
$.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 ยังคงถูกจัดเก็บอยู่ เรียบร้อย
สำหรับการอ้างอิงสิ่งเดียวกันใน 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}))}
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 โดยเพียงแค่คลิกและกดปุ่มอัตโนมัติ แต่ฉันไม่คิดว่ามันจะเป็นจริงกับแนวคิดของความท้าทาย
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)
ที่คุณจะเรียกมันเหมือน
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()
สมมติว่าผู้ใช้ลงชื่อเข้าใช้ Code Golf ด้วย Safari และเปิดใช้งานคุกกี้ ยังถือว่า UIKit ถูกนำเข้าและพร้อมใช้งานโดยปริยาย การทำให้เป็นอันดับ JSON นั้นละเอียดมากใน Cocoa ... อาจอัปเดตสิ่งนี้ด้วยโซลูชัน Swift 3 และคำตอบที่ทดสอบได้สำหรับ 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());}}
ที่ดัดแปลงมาโดยตรงในชวา 8 ของสองคำตอบโปรแกรมเต็มรูปแบบของฉันในหลาม ทำงานได้อย่างสมบูรณ์แบบใน Firefox และขอพื้นที่สำหรับแยกอีเมลและรหัสผ่านทันทีเมื่อโปรแกรมเริ่มทำงาน กล่าวอีกนัยหนึ่งอินพุตอยู่ในรูปแบบEmail Password
ที่ต้องการพื้นที่ว่างระหว่างทั้งสอง