Yorum Yap


16

Görev:

Bu soruya yorum yapan bir program yapın. İçerik olmalı 1234567890123456.

Düzenlemeler:

  1. Sen olarak adlarını ve şifrelerini bırakabilir Uve Pkullanıcı adı ve parola kullanıyorsanız. (uygunsa)

  2. URL Kısaltıcıları Yok (varsa)

  3. Tarayıcı konsolunu kullanamazsınız.


27
Bu mücadelenin sonunda lütfen gelen kutunuzun ekran görüntüsünü gönderin ...
Martin Ender

1
Kodlarını test eden kişilere: Lütfen gönderdikten sonra yorumlarınızı silin, bu meydan okumayla ilgili yorumların gereksiz yere uzun ve spam olmasını önlemek ve modların işlerini kolaylaştırmak için.
Mego

1
Başka hiç kimse bunun yetersiz olduğunu düşünmüyor mu? Bunu nasıl yaparım? Sorular kendi kendine yetmek anlamına gelmiyor mu? API belgelerine bağlantı nerede?
kedi

4
@cat Spesifikasyonların oldukça seyrek olduğunu kabul etsem de, bunun söylenmesi gereken bir bütün olmadığı için olduğunu düşünüyorum. Ayrıca, yığın Exchange API'sını kullanmanın soru için gerekli olmadığını unutmayın, bu nedenle soruya API belgelerini dahil etmek oldukça gereksiz olacaktır.
Alex

3
Mevcut cevaplara ve yorumlara baktığımda bana öyle geliyor ki, a) izin verilen girdileri açıkça beyaz listeye almak (düz okuma cevaplarında herhangi bir girdi olmayabilir, ancak bazıları doğrulanıyor gibi görünüyor) ayrıntılar ve oturum açmak için kullanıcı adı ve parola kullanma zımni gereksinimi atlayarak); b) " Kullanıcı adlarınızı ve parolalarınızı sırasıyla U ve P olarak bırakabilirsiniz " (bize "U" ve "P" sabit kodunu söylediği gibi yorumlayacağım, ancak diğerlerinin açıkça farklı yorumladığı) açıklığa kavuşturmak .
Peter Taylor

Yanıtlar:


11

JQuery ile Javascript, 127 bayt

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

Ismael Miguel ve nicael'e birkaç bayt için teşekkürler.

fkeyParametre hesabınıza özgüdür ve Stack Exchange sayfa açıkken tarayıcınızın yerel depolama içeriklerini inceleyerek bulunabilir. Bu kod, açık bir StackExchange oturumu bulunan bir tarayıcıda çalıştırılmalıdır. fkeyParametreyi tarayıcının yerel deposundan otomatik olarak yükler (bu gönderimin önceki sürümlerinde manuel olarak girilmesi gerekir).

Maalesef, ppcg.lolPOST isteklerini iletmediği için URL kullanılamıyor.

İlginç gerçek: Bu kodu uygun fkeydeğer olmadan çalıştırmayı denerseniz , HTTP 418 yanıtı :

demlik

Nasıl bulunacağına ilişkin örnek fkeyChrome'da değerin :

fkey

Görünüşe göre Winterbash eşyaları hala saklanıyor. Temiz.

Referans olarak, vanilya Javascript'teki aynı şey 314 bayt olacaktır (Ismael Miguel ve nicael'e bazı baytlar için tekrar teşekkürler):

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

Bunu yazmak üzereydim. Lütfen bir Yığın Parçacığı ekleyin.
NoOneIsHere

Selenyum kullanmak yerine siteye erişmek için talebi nasıl kullandığınızı seviyorum!
Meinkraft

1
@NoOneIsHere Bir Yığın Pasajı mümkün değildir, çünkü tarayıcının çerez / oturum verilerine erişmeden korumalı alanda çalışırlar. Ayrıca, Yığın Parçacıklarının POST isteklerine bile izin verip vermediğinden emin değilim.
Mego

3
@IsmaelMiguel Koddaki bir harfin büyük harfini yanlışlıkla kaçırdığı için aşağılamak biraz saçma görünüyor, ama bu sizin çağrınız. Şimdi düzeltildi.
Mego

2
@IsmaelMiguel Downvoting hafif bir yazım hatası nedeniyle.
Mego

14

Safari ile AppleScript, 269 287 bayt

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

Bunu kullanmak için Safari Geliştirici Ayarları'nı etkinleştirmeniz ve ardından etkinleştirmeniz gerekir Allow JavaScript from Apple Events. Mevcut anahtarlık + çerezleri kullanmanın hile olup olmadığından emin değilim ama iyi.

Ayrıca, sadece tıklamaları ve tuş vuruşlarını otomatikleştirerek OSX'in Automator'unda yapmayı başardım, ancak bunun meydan okuma fikrine sadık kaldığını düşünmedim


2
Merhaba, PPCG'ye hoş geldiniz! Bu harika! Bu hile değil. Ayrıca tüm JavaScript yanıtları için JS'yi etkinleştirmeniz gerekir .
NoOneIsHere

PPCG'ye Hoşgeldiniz! Bu kesinlikle yaratıcı bir cevap olsa da, kullanıcı adını ve şifreyi girdi olarak almadığından bağımsız değildir.
Patrick Roberts

1
@Sirens Cevabınız için teşekkürler. Soruyu yeni düzenledim, böylece URL Kısaltıcıları kullanamazsınız?
Meinkraft

1
Çalışmıyor gibi görünüyor ... Yani, yorum linkine değil, bayrak linkine tıklıyor.
nicael

1
OP, URL kısaltıcılarına izin vermeme zorluğunu değiştirdi; bu, codegolf.stackexchange.com için ppcg.lol dosyasını değiştirene kadar bu yanıtı geçersiz kılar.
Alex

7

Selenyum Webdriver ile Python 3.5, 485 427 469 461 449 414 403 bayt:

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

Basit bir Python selenyum web sürücüsü çözümü kullanan tam bir program. Çalışması için ChromeDriver'ın yüklü olmasına rağmen Chrome'da çalışır. Yeniden adlandırarak Uve Pkullanıcının Stack Exchange e-posta ve şifresiyle çalışır. Ancak, ChromeDriver'ı yüklerken herhangi bir sorun varsa, yukarıdaki çözümle aynı şekilde yürütülen ve şu anda 1 bayt daha uzun olmasına rağmen herhangi bir sürücüye ihtiyaç duymayan bir FireFox çözümü. 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()

Ayrıca, bir işlev istenirse, şu anda 513 455 497 489 477'de duran anonim bir lambda işlevi kullanan bir çözüm. 449 431ve tarayıcı olarak Chrome kullanan.

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

Bununla birlikte, yine ChromeDriver ile ilgili herhangi bir sorun varsa, burada aynı tür bir çözüm var, ancak şu anda Firefox'u kullanarak şu anda 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())

Bu lambda işlevlerini, işlevi geçerli bir şey olarak yeniden adlandırarak ve daha sonra normal bir işlev gibi e-postanız ve parolanızla çağırarak çağırırsınız. Örneğin, işlev isimlendirilmişse H, işlevini şöyle çağırırsınız H(Email, Password).


Beni Selenium Webdriver ile tanıştırdığın için çok teşekkür ederim.
Maltysen

@Maltysen Sorun değil. :)
R. Kap

Chromedaha kısadır Firefox?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ Daha önce Webdriver ile çalışmaya başlayamadım. Sonunda yine de var ve benim çözüm şimdi 11 bayt daha kısa! : D
R. Kap

2

İOS'ta Swift 2.2, 380 bayt

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

Kullanıcının Code Golf ile Safari'de oturum açtığını ve çerezlerin etkin olduğunu varsayar. Ayrıca UIKit'in örtük olarak içe aktarıldığını ve kullanılabilir olduğunu varsayar. JSON serileştirmesi Cocoa'da çok ayrıntılı ... Bunu Swift 3 çözümü ve isteğe bağlı olarak macOS / Linux test edilebilir cevapları ile güncelleyebilir.


6
stringByEvaluatingJavaScriptFromStringparlak
kedi

1
@ kedi daha iyi olur .
JAL

2
Şu an kızgınım. Obejctive-C'den benden daha fazla nefret etmenin mümkün olduğunu düşünmemiştim ...
cat

0

Selenium Webdriver ile Java 8, 684 bayt:

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

Python'daki ikinci tam program yanıtımın Java 8'inde doğrudan bir uyarlama . Firefox'ta mükemmel çalışır ve program başladığında derhal boşlukla ayrılmış e-posta ve şifre girişi ister. Başka bir deyişle, girdi Email Passwordikisi arasındaki boşluğun gerekli olduğu formattadır .


Burada sahip olduğunuz kod
Poke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.