发表评论


16

任务:

编写一个对此问题发表评论的程序。内容应为1234567890123456

编辑:

  1. 如果您使用的是用户名和密码UP则可以保留用户名和密码。(如果适用)

  2. 没有网址缩短器(如果适用)

  3. 您可能不使用浏览器控制台。


27
请在此挑战结束时张贴收件箱的屏幕截图...
Martin Ender

1
对于测试其代码的人员:请在提交评论后删除您的评论,以防止对这一挑战的评论冗长而垃圾邮件,并简化了mod的工作。
Mego 2016年

1
没有人认为这是未指定的吗?就像,我该怎么办?问题不是要自成体系吗?API文档的链接在哪里?

4
@cat虽然我同意规范比较稀疏,但我认为这是因为不需要说一个整体。还要注意,问题不需要使用Stack Exchange API,因此在问题中包含API文档将是多余的。
Alex A.

3
投票结束时不清楚,因为查看现有答案和评论对我来说似乎需要a)明确将允许的输入列入白名单(在简单的阅读答案中可能不需要输入,但其中一些似乎正在使用auth详细信息并绕过使用用户名和密码登录的隐含要求);b)弄清楚“ 您可以分别将用户名和密码保留为U和P ”的含义(我将其解释为告诉我们对“ U”和“ P”进行硬编码,但其他人对此有明显的不同解释)。
彼得·泰勒

Answers:


11

带有jQuery的Javascript,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

如何fkey在Chrome中查找值的示例:

fkey

显然,Winterbash的东西仍在存储中。整齐。

作为参考,香草Javascript中的相同内容为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}))}

我正要写这个。请添加一个堆栈代码段。
NoOneIsHere

我喜欢您使用请求访问网站而不使用硒的方式!
Meinkraft '16

1
@NoOneIsHere无法使用堆栈代码段,因为它们在未访问浏览器Cookie /会话数据的情况下运行沙盒。另外,我不确定堆栈片段是否甚至允许POST请求。
Mego

3
@IsmaelMiguel由于在代码中意外遗漏了一个字母的大写而感到沮丧,这很可笑,但这就是您的要求。现在已修复。
Mego

2
@IsmaelMiguel因为有轻微的错字而令人不安。
Mego

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是否在作弊,但是很好。

我还通过仅使点击和击键自动化来在OSX的Automator中做到了这一点,但是我认为这并不符合挑战的想法


2
您好,欢迎来到PPCG!这很棒!那不是作弊。您还需要为所有 JavaScript答案启用JS 。
NoOneIsHere

欢迎来到PPCG!尽管这肯定是一个有创意的答案,但它并不是独立的,因为它不使用用户名和密码作为输入。
帕特里克·罗伯茨

1
@Sirens感谢您的回答。我刚刚编辑了问题,所以您不能使用URL Shorteners吗?
Meinkraft '16

1
它似乎不起作用...我的意思是,它确实单击了标志链接,而不是评论链接。
nicael '16

1
OP修改了挑战,以禁止使用URL缩短器,这使该答案无效,直到您将ppcg.lol交换为codegolf.stackexchange.com。
Alex A.

7

蟒3.5与硒的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硒Web驱动程序解决方案的完整程序。尽管需要安装ChromeDriver才能运行,但它在Chrome 中可以运行。通过分别重命名U和重命名P用户的Stack Exchange电子邮件和密码来工作。但是,如果安装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()

此外,如果一个函数想,这里是用匿名lambda函数的解决方案,目前为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())

您可以通过简单地将函数重命名为有效名称来调用这些lambda函数,然后像普通函数一样使用电子邮件和密码进行调用。例如,如果函数被命名H,则将其命名为H(Email, Password)


非常感谢您向我介绍Selenium Webdriver。
Maltysen '16

@Maltysen没问题。:)
R. Kap

ChromeFirefox?短
Rɪᴋᴇʀ

@EᴀsᴛᴇʀʟʏIʀᴋ好吧,我以前无法使用Webdriver来工作。我终于有了,我的解决方案现在缩短了11个字节!:D
R. Kap

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,并且启用了Cookie。还假定UIKit是隐式导入的并且可用。JSON序列化在Cocoa中是如此冗长...可能会使用Swift 3解决方案以及可选的macOS / Linux可测试答案来更新它。


6
stringByEvaluatingJavaScriptFromString辉煌
2016年

1
@cat 会变得更好
日航

2
我现在很生气 我不认为这是可能的恨Obejctive-C比我更...

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中直接修改了我在Python编写的第二个完整程序答案。在Firefox中完美运行,并在程序启动时要求立即使用空格将电子邮件和密码输入。换句话说,输入的格式Email Password是在两者之间需要空格。


您在此处的代码长于684,哈哈
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.