Оставить комментарий


16

Задача:

Сделайте программу, которая оставит комментарий к этому вопросу. Содержание должно быть 1234567890123456.

Редактирование:

  1. Вы можете оставить свои имена пользователей и пароли, как Uи Pесли вы используете имя пользователя и пароль. (если это применимо)

  2. Нет URL Shorteners (если применимо)

  3. Вы не можете использовать консоль браузера.


27
Пожалуйста, опубликуйте скриншот вашего почтового ящика в конце этого задания ...
Мартин Эндер

1
Людям, тестирующим их код: удалите свои комментарии после их отправки, чтобы комментарии на этот вызов не становились излишне длинными и нежелательными, и чтобы облегчить работу модов.
Mego

1
Неужели никто не думает, что это недостаточно? Мол, как, черт возьми, я это делаю? Разве вопросы не должны быть автономными? Где ссылка на API документы?
кот

4
@cat Хотя я согласен с тем, что спецификации довольно скудны, я думаю, это потому, что просто не нужно говорить целое. Также обратите внимание, что использование Stack Exchange API в этом вопросе не требуется, поэтому включение документов API в вопрос было бы излишним.
Алекс А.

3
Голосование за закрытие также неясно, потому что, глядя на существующие ответы и комментарии, мне кажется, что для этого необходимо: а) явно занести в белый список разрешенные входные данные (при простом чтении ответы могут не требовать ввода, но некоторые из них, кажется, принимают аутентификацию). детали и обход подразумеваемого требования использовать имя пользователя и пароль для входа в систему); б) прояснить, что означает « Вы можете оставить свои имена пользователей и пароли как U и P соответственно » (что я бы интерпретировал как указание нам жестко закодировать «U» и «P», но которые другие явно истолковали по-разному).
Питер Тейлор

Ответы:


11

Javascript с jQuery, 127 байт

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

Спасибо Измаилу Мигелю и Никалу за несколько байтов.

fkeyПараметр является уникальным для вашей учетной записи, и может быть найден путем изучения местного контента для хранения вашего браузера с открытой страницей StackExchange. Этот код должен быть запущен в браузере с открытым сеансом StackExchange. Он автоматически загружает fkeyпараметр из локального хранилища браузера (предыдущие версии этого представления требовали его ввода вручную).

К сожалению, ppcg.lolURL не может быть использован, потому что он не пропускает POST-запросы.

Интересный факт: если вы попытаетесь запустить этот код без правильного fkeyзначения, вы получите ответ HTTP 418 :

teapot

Пример того, как найти fkeyзначение в Chrome:

fkey

Очевидно, что Winterbash все еще хранится. Ухоженная.

Для справки, то же самое в ванильном Javascript было бы 314 байтов (еще раз спасибо Измаилу Мигелю и Никалею за некоторые байты):

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 Понижение рейтинга за случайное пропускание заглавной буквы в одной букве кода кажется немного смешным, но это ваш вызов. Это исправлено сейчас.
Мего

2
@IsmaelMiguel Downvoting из-за небольшой опечатки.
Мего

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 Developer Settings, а затем включить Allow JavaScript from Apple Events. Я не уверен, что обманывать или не использовать существующую связку ключей + куки, ну да ладно.

Мне также удалось сделать это в OSX Automator, просто автоматизировав щелчки и нажатия клавиш, однако я не думал, что это осталось верным идее вызова


2
Здравствуйте и добро пожаловать в PPCG! Это круто! Это не обман. Вам также необходимо включить JS для всех ответов JavaScript.
NoOneIsHere

Добро пожаловать в PPCG! Хотя это, безусловно, творческий ответ, он не является автономным, поскольку в него не входят имя пользователя и пароль.
Патрик Робертс

1
@ Сирены Спасибо за ответ. Я только что отредактировал вопрос, так что вы не можете использовать URL Shorteners?
Meinkraft

1
Кажется, он не работает ... Я имею в виду, он нажимает на ссылку флага, а не на комментарий.
nicael

1
ОП изменил задачу, чтобы запретить сокращения URL-адресов, что лишает законной силы этот ответ до тех пор, пока вы не поменяете ppcg.lol на codegolf.stackexchange.com.
Алекс А.

7

Python 3.5 с Selenium 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. Работает в 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 байт и использует 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

@ Малтисен Нет проблем. :)
Р. Кап

Chromeкороче чем Firefox?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ Ну, я не мог заставить его работать с Webdriver раньше. Я, наконец, получил, и мое решение теперь на 11 байтов короче! : D
Р. Кап

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 в Какао настолько многословна ... Возможно, обновите ее с помощью решения Swift 3 и опционально тестируемых ответов macOS / Linux.


6
stringByEvaluatingJavaScriptFromStringБлестящий
кот


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

Прямая адаптация в Java 8 моего второго полного программного ответа на Python . Прекрасно работает в Firefox и запрашивает ввод электронной почты и пароля через пробел сразу после запуска программы. Другими словами, входные данные имеют формат, в Email Passwordкотором необходимо пространство между ними.


Код вы здесь больше , чем 684, ха - ха
Poke
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.