코멘트를 남겨주세요


16

직무:

이 질문에 대한 의견을 남기는 프로그램을 만드십시오. 내용은이어야합니다 1234567890123456.

편집 :

  1. 당신은 귀하의 사용자 이름과 암호를 떠날 수 U와 P당신이 사용자 이름과 암호를 사용하는 경우. (적용된다면)

  2. URL 단축기 없음 (해당되는 경우)

  3. 브라우저 콘솔을 사용하지 못할 수 있습니다.


27
도전이 끝날 때받은 편지함의 스크린 샷을 게시하십시오 ...
— Martin Ender

1
코드를 테스트하는 사람들에게 : 제출 한 후 주석을 삭제하고,이 도전에 대한 주석이 불필요하게 길고 스팸이되지 않도록하고 모드 작업을보다 쉽게하기 위해 주석을 삭제하십시오.
— Mego

1
아무도 이것이 잘못되었다고 생각하지 않습니까? 내가 어떻게 그런 짓을합니까? 질문이 독립적 인 것이 아닌가? API 문서에 대한 링크는 어디에 있습니까?
— 고양이

4
@cat 사양이 다소 희박하다는 데 동의하지만, 말할 필요가있는 전체가 없기 때문이라고 생각합니다. 또한 질문에 Stack Exchange API를 사용할 필요가 없으므로 질문에 API 문서를 포함시키는 것이 다소 불필요합니다.
— Alex A.

3
기존 답변과 의견을보고 있기 때문에 명확하지 않은 투표는 나에게 허용되는 입력을 명시 적으로 허용 목록에 추가해야합니다 (일반 읽기 답변에는 입력이 없을 수 있지만 일부는 인증을받는 것으로 보입니다) 사용자 이름과 비밀번호를 사용하여 로그인해야한다는 암시 된 요구 사항을 무시하고 세부 사항을 무시 함); b) " 사용자 이름과 비밀번호를 각각 U와 P로 남겨 둘 수 있습니다 "라는 의미를 명확하게하기 위해 ( "U"와 "P"를 하드 코딩하라는 말로 해석하지만 다른 사람들이 다르게 해석 한 것으로 해석합니다).
— 피터 테일러

답변:


11

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.lolURL은 POST 요청을 통과하지 않기 때문에 사용할 수 없습니다.

재미있는 사실 : 적절한 fkey값 없이이 코드를 실행하려고 하면 HTTP 418 응답이 나타납니다.

teapot

fkeyChrome 에서 값 을 찾는 방법의 예 :

fkey

분명히 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}))}

나는 단지 이것을 쓰려고했다. 스택 스 니펫을 추가하십시오.
— NoOneIsHere7

셀레늄 대신 요청을 사용하여 사이트에 액세스하는 방법이 마음에 듭니다.
— Meinkraft

1
@NoOneIsHere 스택 스 니펫은 브라우저의 쿠키 / 세션 데이터에 액세스하지 않고 샌드 박스로 실행되기 때문에 불가능합니다. 또한 스택 스 니펫이 POST 요청을 허용하는지 확실하지 않습니다.
— Mego

3
@IsmaelMiguel 코드에서 한 문자의 대문자를 실수로 놓친 것에 대한 공감대는 약간 어리석은 것처럼 보이지만 그것은 당신의 전화입니다. 이제 수정되었습니다.
— 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 합니다. 기존 키 체인 + 쿠키를 사용하는 것이 부정 행위인지 아닌지 잘 모르겠습니다.

또한 클릭과 키 입력을 자동화하여 OSX의 Automator 에서이 작업을 수행했지만 도전에 대한 아이디어가 사실이라고 생각하지 않았습니다.


2
안녕하세요, PPCG에 오신 것을 환영합니다! 대단해! 부정 행위가 아닙니다. 또한 모든 JavaScript 답변에 JS를 활성화해야 합니다.
— NoOneIsHere7

PPCG에 오신 것을 환영합니다! 이것은 독창적 인 답변이지만 사용자 이름과 비밀번호를 입력으로 사용하지 않기 때문에 자체적으로 포함 된 것은 아닙니다.
— 패트릭 로버츠

1
@Sirens 답변 주셔서 감사합니다. 방금 질문을 편집하여 URL 단축기를 사용할 수 없습니까?
— Meinkraft

1
작동하지 않는 것 같습니다 ... 댓글 링크가 아닌 플래그 링크를 클릭한다는 의미입니다.
— nicael

1
OP는 URL 단축기를 허용하지 않는 문제를 수정하여 ppcg.lol을 codegolf.stackexchange.com으로 교체 할 때까지이 답변을 무효화합니다.
— Alex A.

7

Selenium Webdriver가 포함 된 Python 3.5, 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 셀레늄 웹 드라이버 솔루션을 활용하는 전체 프로그램입니다. 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).


Selenium Webdriver를 소개해 주셔서 감사합니다.
— Maltysen

@Maltysen 문제 없습니다. :)
— R. Kap

Chrome보다 짧 Firefox습니까?
— Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ 글쎄, 나는 전에 Webdriver로 작업 할 수 없었습니다. 나는 마침내 가지고 있었고, 나의 해결책은 지금 11 바이트 더 짧다! : D
— R. 캅

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에 로그인하고 쿠키를 활성화했다고 가정합니다. 또한 UIKit을 내재적으로 가져 와서 사용할 수 있다고 가정합니다. JSON 직렬화는 Cocoa에서 매우 장황합니다 ... Swift 3 솔루션 및 선택적으로 macOS / Linux 테스트 가능 답변으로 업데이트 할 수 있습니다.


6
stringByEvaluatingJavaScriptFromString화려한
— 고양이

1

2
나 지금 화났어 난 Obejctive-C를 증오하는 것이 가능하다고 생각하지 않았다 ...
— cat

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());}}

파이썬 에서 두 번째 전체 프로그램 답변의 Java 8에 직접 적응했습니다 . Firefox에서 완벽하게 작동하며 프로그램이 시작되면 즉시 공백으로 구분 된 이메일 및 비밀번호 입력을 요청합니다. 즉, 입력은 Email Password둘 사이에 공백이 필요한 형식입니다.


여기있는 코드가 684 이상입니다. haha
— Poke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.