Để lại một bình luận


16

Bài tập:

Tạo một chương trình để lại nhận xét về câu hỏi này. Các nội dung nên được 1234567890123456.

Chỉnh sửa:

  1. Bạn có thể để lại tên người dùng và mật khẩu của mình UPnếu bạn đang sử dụng tên người dùng và mật khẩu. (nếu có)

  2. Không rút ngắn URL (nếu có)

  3. Bạn không thể sử dụng bảng điều khiển trình duyệt.


27
Vui lòng đăng ảnh chụp màn hình hộp thư đến của bạn khi kết thúc thử thách này ...
Martin Ender

1
Để những người kiểm tra mã của họ: vui lòng xóa (các) nhận xét của bạn sau khi bạn gửi chúng, để giữ cho các nhận xét về thách thức này không bị kéo dài và spam một cách không cần thiết, và để công việc của các mod dễ dàng hơn.
Mego

1
Có ai khác nghĩ rằng điều này là không xác định? Giống như, làm thế quái nào tôi làm điều đó? Không có câu hỏi có nghĩa là khép kín? Liên kết đến các tài liệu API ở đâu?
con mèo

4
@cat Mặc dù tôi đồng ý rằng các thông số kỹ thuật khá thưa thớt, tôi nghĩ đó là vì không có gì để nói cả. Cũng lưu ý rằng việc sử dụng API Stack trao đổi không bắt buộc bởi câu hỏi, do đó, bao gồm các tài liệu API trong câu hỏi sẽ khá thừa.
Alex A.

3
Bỏ phiếu để đóng là không rõ ràng vì nhìn vào các câu trả lời và nhận xét hiện có với tôi rằng điều này cần a) để liệt kê rõ ràng các đầu vào được phép (trên một câu trả lời đọc đơn giản có thể không có đầu vào, nhưng một số trong số chúng dường như đang được xác thực chi tiết và bỏ qua yêu cầu ngụ ý sử dụng tên người dùng và mật khẩu để đăng nhập); b) để làm rõ ý nghĩa của " Bạn có thể để tên người dùng và mật khẩu của mình lần lượt là U và P " (mà tôi sẽ giải thích là bảo chúng tôi mã hóa "U" và "P", nhưng những người khác đã giải thích rõ ràng khác nhau).
Peter Taylor

Câu trả lời:


11

Javascript với jQuery, 127 byte

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

Cảm ơn Ismael Miguel và nicael cho một vài byte.

Các fkeytham số là duy nhất vào tài khoản của bạn, và có thể được tìm thấy bằng cách kiểm tra nội dung lưu trữ địa phương của trình duyệt của bạn với một trang mở StackExchange. Mã này phải được chạy trong trình duyệt có phiên StackExchange mở. Nó tự động tải fkeytham số từ bộ nhớ cục bộ của trình duyệt (các phiên bản trước của bài nộp này yêu cầu phải nhập thủ công).

Thật không may, ppcg.lolURL không thể được sử dụng, vì nó không vượt qua các yêu cầu POST thông qua.

Sự thật thú vị: nếu bạn cố chạy mã này mà không có fkeygiá trị phù hợp , bạn sẽ nhận được phản hồi HTTP 418 :

ấm trà

Ví dụ về cách tìm fkeygiá trị trong Chrome:

fkey

Rõ ràng công cụ Winterbash vẫn đang được lưu trữ. Khéo léo.

Để tham khảo, điều tương tự trong vanilla Javascript sẽ là 314 byte (một lần nữa xin cảm ơn Ismael Miguel và nicael vì đã tắt một số byte):

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

Tôi chỉ định viết cái này. Vui lòng thêm một đoạn trích.
NoOneIsĐây là

Tôi thích cách bạn sử dụng yêu cầu để truy cập trang web thay vì sử dụng selen!
Meinkraft

1
@NoOneIsĐây là một Stack Snippet, vì chúng chạy hộp cát, không có quyền truy cập vào dữ liệu cookie / phiên của trình duyệt. Ngoài ra, tôi không chắc chắn nếu Stack Snippets thậm chí cho phép các yêu cầu POST.
Mego

3
@IsmaelMiguel Downvote vì vô tình thiếu chữ viết hoa trên một chữ cái trong mã có vẻ hơi vô lý, nhưng đó là cuộc gọi của bạn. Bây giờ nó đã được sửa.
Mego

2
@IsmaelMiguel Downvote vì một lỗi đánh máy nhẹ.
Mego

14

AppleScript với Safari, 269 287 byte

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

Để sử dụng, bạn cần bật Cài đặt dành cho nhà phát triển Safari và sau đó bật Allow JavaScript from Apple Events. Tôi không chắc liệu nó có gian lận hay không sử dụng móc khóa + cookie hiện có nhưng ồ.

Tôi cũng đã xoay sở để thực hiện điều này trong Automator của OSX bằng cách tự động hóa các lần nhấp và nhấn phím tuy nhiên tôi không nghĩ nó đúng với ý tưởng của thử thách


2
Xin chào, và chào mừng đến với PPCG! Điều đó thật tuyệt! Đó không phải là gian lận. Bạn cũng cần kích hoạt JS cho tất cả các câu trả lời JavaScript.
NoOneIsHãy

Chào mừng đến với PPCG! Mặc dù đây chắc chắn là một câu trả lời sáng tạo, nhưng nó không độc lập, vì nó không lấy tên người dùng và mật khẩu làm đầu vào.
Patrick Roberts

1
@Sirens Cảm ơn câu trả lời. Tôi vừa chỉnh sửa câu hỏi để bạn không thể sử dụng Công cụ rút ngắn URL?
Meinkraft

1
Nó dường như không hoạt động ... Ý tôi là, nó nhấp vào liên kết cờ, không phải liên kết bình luận.
nicael

1
OP đã sửa đổi thách thức để không cho phép rút ngắn URL, làm mất hiệu lực câu trả lời này cho đến khi bạn trao đổi ppcg.lol cho codegolf.stackexchange.com.
Alex A.

7

Python 3.5 với Selenium WebSearch, 485 427 469 461 449 414 403 byte:

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

Một chương trình đầy đủ sử dụng giải pháp trình điều khiển web Python selenium đơn giản. Hoạt động trong Chrome, mặc dù nó cần ChromeDriver được cài đặt để hoạt động. Hoạt động bằng cách đổi tên UPtương ứng với email và mật khẩu Stack Exchange của người dùng. Tuy nhiên, nếu có bất kỳ sự cố nào khi cài đặt ChromeDriver, thì đây là giải pháp FireFox được thực thi theo cách chính xác như giải pháp trên và không cần bất kỳ trình điều khiển nào, mặc dù hiện tại nó dài hơn 1 byte ở 414 404 byte :

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

Ngoài ra, nếu muốn có một chức năng, đây là một giải pháp sử dụng chức năng lambda ẩn danh, hiện đang đứng ở mức 513 455 497 489 477 449 431 byte và sử dụng Chrome làm trình duyệt.

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

Tuy nhiên, nếu có, một lần nữa, bất kỳ vấn đề liên quan đến ChromeDriver, đây là cùng một loại giải pháp nhưng lần này sử dụng Firefox, hiện đang đứng ở 442 432 byte :

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

Bạn gọi các hàm lambda này bằng cách đổi tên hàm thành bất kỳ thứ gì hợp lệ và sau đó gọi bằng email và mật khẩu của bạn như một hàm bình thường. Ví dụ, nếu hàm được đặt tên H, bạn sẽ gọi nó như thế nào H(Email, Password).


Cảm ơn bạn rất nhiều vì đã giới thiệu tôi với Selenium Webdo.
Maltysen

@Maltysen Không có vấn đề. :)
R. Kap

Chromengắn hơn Firefox?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ Chà, trước đây tôi không thể làm việc với Webdo. Cuối cùng tôi cũng có, và giải pháp của tôi bây giờ ngắn hơn 11 byte! : D
R. Kap

2

Swift 2.2 trên iOS, 380 byte

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

Giả sử người dùng đã đăng nhập vào Code Golf bằng Safari và bật cookie. Cũng giả sử UIKit được nhập khẩu ngầm và có sẵn. Tuần tự hóa JSON rất dài dòng trong Ca cao ... Có thể cập nhật điều này với giải pháp Swift 3 và các câu trả lời có thể kiểm tra macOS / Linux tùy chọn.


6
stringByEvaluatingJavaScriptFromStringrực rỡ
mèo


2
Tôi đang tức giận Tôi đã không nghĩ rằng có thể ghét Obejctive-C nhiều hơn tôi đã làm ...
con mèo

0

Java 8 với Selenium WebSearch, 684 byte:

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

Một điều chỉnh trực tiếp trong Java 8 của câu trả lời chương trình đầy đủ thứ hai của tôi trong Python . Hoạt động hoàn hảo trong Firefox và yêu cầu nhập email và mật khẩu tách biệt không gian ngay lập tức khi chương trình bắt đầu. Nói cách khác, đầu vào ở định dạng Email Passwordmà khoảng trống ở giữa hai là cần thiết.


Mã bạn có ở đây dài hơn 684, haha
Chọc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.