Deixe um comentário

16

Tarefa:

Faça um programa que deixe um comentário sobre esta questão. O conteúdo deve ser 1234567890123456.

Editar% s:

  1. Você pode deixar seus nomes de usuário e senhas como Ue Pse você estiver usando nome de usuário e senha. (se aplicável)

  2. Nenhum encurtador de URL (se aplicável)

  3. Você não pode usar o console do navegador.

Meinkraft
fonte
27
Por favor, poste uma captura de tela da sua caixa de entrada no final deste desafio ...
Martin Ender
1
Para as pessoas que testam seu código: exclua seus comentários após enviá-los, para impedir que os comentários sobre esse desafio fiquem desnecessariamente longos e com spam e para facilitar o trabalho dos mods.
Mego
1
Ninguém mais acha que isso é subespecificado? Tipo, como diabos eu faço isso? As perguntas não devem ser independentes? Onde está o link para os documentos da API?
gato
4
@cat Embora eu concorde que as especificações são bastante esparsas, acho que é porque simplesmente não há um todo que precise ser dito. Observe também que o uso da API do Stack Exchange não é exigido pela pergunta; portanto, incluir documentos da API na pergunta seria supérfluo.
Alex A.
3
A votação para fechar como pouco clara, porque, olhando para as respostas e comentários existentes, parece-me que isso precisa a) listar explicitamente as entradas permitidas (em uma leitura simples, as respostas podem não ter nenhuma entrada, mas algumas delas parecem estar aceitando autenticação detalhes e ignorando o requisito implícito de usar nome de usuário e senha para efetuar login); b) esclarecer o significado de " Você pode deixar seus nomes de usuário e senhas como U e P, respectivamente " (o que eu interpretaria como nos dizendo para codificar "U" e "P", mas que outros claramente interpretaram de maneira diferente).
Peter Taylor

Respostas:

11

Javascript com jQuery, 127 bytes

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

Obrigado a Ismael Miguel e nicael por alguns bytes.

O fkeyparâmetro é exclusivo da sua conta e pode ser encontrado examinando o conteúdo de armazenamento local do seu navegador com uma página StackExchange aberta. Este código deve ser executado em um navegador com uma sessão aberta do StackExchange presente. Ele carrega automaticamente o fkeyparâmetro do armazenamento local do navegador (as versões anteriores deste envio exigiam que ele fosse inserido manualmente).

Infelizmente, o ppcg.lolURL não pode ser usado, porque não passa solicitações POST.

Curiosidade: se você tentar executar esse código sem o fkeyvalor adequado , receberá uma resposta HTTP 418 :

chaleira

Exemplo de como encontrar o fkeyvalor no Chrome:

fkey

Aparentemente, as coisas de Winterbash ainda estão sendo armazenadas. Arrumado.

Para referência, o mesmo em Javascript baunilha seria 314 bytes (obrigado novamente a Ismael Miguel e nicael por alguns bytes desativados):

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}))}
Mego
fonte
Eu estava prestes a escrever isso. Por favor, adicione um snippet de pilha.
NoOneIsHere
Eu gosto de como você usa a solicitação para acessar o site em vez de usar selênio!
Meinkraft
1
@NoOneIsHere Não é possível um snippet de pilha, porque eles executam sandboxed, sem acesso aos dados de cookies / sessões do navegador. Além disso, não tenho certeza se os Snippets de pilha ainda permitem solicitações POST.
Mego
3
@IsmaelMiguel A redução de votos por perder acidentalmente a capitalização em uma letra do código parece um pouco ridícula, mas essa é a sua decisão. Está consertado agora.
Mego
2
@IsmaelMiguel O voto negativo é devido a um pequeno erro de digitação.
Mego
14

AppleScript com Safari, 269 287 bytes

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

Para usar isso, é necessário ativar as Configurações do desenvolvedor do Safari e ativar Allow JavaScript from Apple Events. Não tenho certeza se está enganando ou não o uso do chaveiro + cookies existentes, mas tudo bem.

Eu também consegui fazer isso no Automator da OSX, automatizando apenas os cliques e as teclas, mas não achei que fosse fiel à ideia do desafio

Sirenes
fonte
2
Olá, e bem-vindo ao PPCG! Isso é ótimo! Isso não é trapaça. Você também precisa ativar o JS para todas as respostas JavaScript.
NoOneIsHere
Bem-vindo ao PPCG! Embora essa seja certamente uma resposta criativa, ela não é independente, pois não aceita o nome de usuário e a senha como entrada.
Patrick Roberts
1
@ Sirens Obrigado pela resposta. Acabei de editar a pergunta para que você não possa usar os Encurtadores de URL?
Meinkraft
1
Parece não funcionar ... Quero dizer, clica no link da sinalização, não no link dos comentários.
Nicael 9/07
1
O OP modificou o desafio para não permitir encurtadores de URL, o que invalida essa resposta até você trocar ppcg.lol por codegolf.stackexchange.com.
Alex A.
7

Python 3.5 com Selenium Webdriver, 485 427 469 461 449 414 403 bytes:

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

Um programa completo utilizando uma solução simples de driver da web Python selenium. Funciona no Chrome, embora precise do ChromeDriver instalado para funcionar. Funciona renomeando Ue Ppara o email e a senha do Stack Exchange do usuário, respectivamente. No entanto, se houver algum problema ao instalar o ChromeDriver, aqui está uma solução FireFox que é executada exatamente da mesma maneira que a solução acima e não precisa de drivers, embora atualmente seja 1 byte mais a 414 404 bytes :

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

Além disso, se uma função for desejada, aqui está uma solução usando uma função lambda anônima, atualmente com 513 455 497 489 477 449 431 bytes e usando o Chrome como navegador.

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

No entanto, se houver novamente problemas com o ChromeDriver, aqui está o mesmo tipo de solução, mas desta vez usando o Firefox, atualmente com 442 432 bytes :

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

Você chama essas funções lambda simplesmente renomeando a função como algo válido e depois chamando com seu email e senha como uma função normal. Por exemplo, se a função fosse nomeada H, você a chamaria assim H(Email, Password).

R. Kap
fonte
Muito obrigado por me apresentar o Selenium Webdriver.
Maltysen 06/07/19
@ Maltysen Sem problemas. :)
R. Kap
Chromeé mais curto que Firefox?
Rɪᴋᴇʀ
@ EᴀsᴛᴇʀʟʏIʀᴋ Bem, eu não conseguia fazê-lo funcionar com o Webdriver antes. Finalmente, porém, e minha solução agora é 11 bytes mais curta! : D
R. Kap 06/07
2

Swift 2.2 no iOS, 380 bytes

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

Supõe que o usuário esteja logado no Code Golf com o Safari e tenha os cookies ativados. Também assume que o UIKit está implicitamente importado e disponível. A serialização JSON é tão detalhada no cacau ... Pode ser atualizada com uma solução Swift 3 e, opcionalmente, com respostas testáveis ​​para o macOS / Linux.

JAL
fonte
6
stringByEvaluatingJavaScriptFromStringbrilhante
gato
1
@cat fica melhor .
JAL
2
Eu estou irritado agora. Eu não acho que foi possível a odiar objectivo n.o-C mais do que eu fiz ...
gato
0

Java 8 com Selenium Webdriver, 684 bytes:

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

Uma adaptação direta em Java 8 da minha segunda resposta completa do programa em Python . Funciona perfeitamente no Firefox e solicita e-mail e senha separados por espaço imediatamente quando o programa é iniciado. Em outras palavras, a entrada está no formato em Email Passwordque o espaço entre os dois é necessário.

R. Kap
fonte
O código que você tem aqui é maior que 684, haha ​​#
21419 Poke