任务:
编写一个对此问题发表评论的程序。内容应为1234567890123456
。
编辑:
如果您使用的是用户名和密码
U
,P
则可以保留用户名和密码。(如果适用)没有网址缩短器(如果适用)
您可能不使用浏览器控制台。
任务:
编写一个对此问题发表评论的程序。内容应为1234567890123456
。
编辑:
如果您使用的是用户名和密码U
,P
则可以保留用户名和密码。(如果适用)
没有网址缩短器(如果适用)
您可能不使用浏览器控制台。
Answers:
$.post("//codegolf.stackexchange.com/posts/84546/comments",{comment:"1234567890123456",fkey:StackExchange.options.user.fkey})
感谢Ismael Miguel和nicael提供了几个字节。
该fkey
参数对于您的帐户是唯一的,可以通过在打开StackExchange页面的情况下检查浏览器的本地存储内容来找到该参数。此代码必须在存在打开的StackExchange会话的浏览器中运行。它会自动fkey
从浏览器的本地存储中加载参数(此提交的先前版本要求手动输入)。
不幸的是,该ppcg.lol
URL无法使用,因为它不会传递POST请求。
有趣的事实:如果您尝试在没有适当fkey
值的情况下运行此代码,则会收到HTTP 418响应:
如何fkey
在Chrome中查找值的示例:
显然,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}))}
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中做到了这一点,但是我认为这并不符合挑战的想法
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)
。
Chrome
比Firefox
?短
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可测试答案来更新它。
stringByEvaluatingJavaScriptFromString
辉煌
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
是在两者之间需要空格。