직무:
이 질문에 대한 의견을 남기는 프로그램을 만드십시오. 내용은이어야합니다 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 물건은 여전히 저장되고 있습니다. 산뜻한.
참고로 바닐라 자바 스크립트에서 동일한 것은 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
합니다. 기존 키 체인 + 쿠키를 사용하는 것이 부정 행위인지 아닌지 잘 모르겠습니다.
또한 클릭과 키 입력을 자동화하여 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 셀레늄 웹 드라이버 솔루션을 활용하는 전체 프로그램입니다. ChromeDriver가 설치되어 있어야 하지만 Chrome에서 작동합니다. 이름을 변경하여 작품 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와 관련된 문제가 다시있는 경우 여기에는 동일한 유형의 솔루션이 있지만 이번에는 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()
사용자가 Safari를 사용하여 Code Golf에 로그인하고 쿠키를 활성화했다고 가정합니다. 또한 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());}}
파이썬 에서 두 번째 전체 프로그램 답변의 Java 8에 직접 적응했습니다 . Firefox에서 완벽하게 작동하며 프로그램이 시작되면 즉시 공백으로 구분 된 이메일 및 비밀번호 입력을 요청합니다. 즉, 입력은 Email Password
둘 사이에 공백이 필요한 형식입니다.