Залишити коментар


16

Завдання:

Складіть програму, яка залишить коментар до цього питання. Зміст має бути 1234567890123456.

Зміни:

  1. Ви можете залишати свої імена та паролі як Uі Pякщо ви використовуєте ім’я користувача та пароль. (якщо застосовно)

  2. Немає скорочень URL-адрес (якщо застосовується)

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


27
Опублікуйте скріншот своєї папки "Вхідні" наприкінці цього виклику ...
Мартін Ендер

1
Для людей, які тестують свій код: будь-ласка, видаліть ваш коментар (и) після їх надсилання, щоб коментарі щодо цього виклику не ставали зайвими і не спам, і щоб спростити роботу модників.
Мего

1
Хіба ніхто більше не вважає, що це не визначено? Мовляв, як чорт це роблю? Хіба питання не означало бути самостійними? Де посилання на документи API?
кіт

4
@cat Хоча я згоден, що технічні характеристики досить рідкі, я думаю, що це тому, що просто не існує цілого, про що потрібно говорити. Також зауважте, що використання API Stack Exchange не вимагає цього питання, тому включення документів 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 Схилення через незначну помилку є.
Мего

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. Я не впевнений, чи це обман чи не використовувати існуючий брелок + файли cookie, але добре.

Мені також вдалося це зробити в Automator OSX, просто автоматизувавши клацання та натискання клавіш, однак я не вважав, що це залишається вірним ідеї проблеми


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

Ласкаво просимо до PPCG! Хоча це, безумовно, творча відповідь, вона не є самодостатньою, оскільки не приймає ім'я користувача та пароль як вхідні дані.
Патрік Робертс

1
@Sirens Дякую за відповідь. Я щойно відредагував це запитання, щоб ви могли не використовувати URL-скорочувачів?
Meinkraft

1
Це, здається, не працює ... Я маю на увазі, воно натискає посилання, а не посилання на коментар.
nicael

1
ОП змінила завдання, щоб заборонити скорочувачі URL-адрес, що скасовує цю відповідь, поки ви не поміняєте ppcg.lol на codegolf.stackexchange.com.
Алекс А.

7

Python 3.5 із веб-драйвером Selenium, 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 селену. Працює в 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.
Мальтісен

@Maltysen Немає проблем. :)
Р. Кап

Chromeкоротше, ніж Firefox?
Rɪᴋᴇʀ

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

2

Швидкий 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 і увімкнено файли cookie. Також передбачається, що UIKit імпліцитно імпортується та доступний. Серіалізація JSON настільки багатослівна в какао ... Можливо, оновіть це рішенням Swift 3 та, можливо, відповіді на тестування macOS / Linux.


6
stringByEvaluatingJavaScriptFromStringблискучий
кіт


2
Я зараз злий. Я не думав, що можна ненавидіти Obejctive-C більше, ніж я ...
кіт

0

Java 8 із веб-драйвером Selenium, 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, ха-ха
Пок
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.