Załaduj stronę internetową i wypełnij formularz z wiersza poleceń


4

Korzystając z wiersza poleceń systemu Linux (powłoka Bash) lubię ładować określoną stronę internetową do przeglądarki (zwykle Firefox, ale inna byłaby w porządku, o ile działa pod Linuksem) i wypełniać wstępnie zdefiniowany formularz pewnymi danymi. W rzeczywistości powinno to działać z pliku Makefile. Większość danych formularza jest statyczna i będzie przechowywana jako zmienne w pliku Makefile, tylko niektóre pola należy wypełnić ręcznie przed ręcznym wysłaniem formularza.

Wiem, jak załadować daną stronę internetową z wiersza polecenia, używając:

firefox <URL>

Wydaje się jednak, że nie ma możliwości automatycznego wypełnienia formularza zmiennymi podanymi w wierszu poleceń. Czy istnieje wtyczka, plik wykonywalny lub JavaScript, który pozwala mi to zrobić? Wszelkie sugestie i wskazówki są mile widziane. Nie mam nic przeciwko kodowaniu JavaScript.

Odpowiedzi:


3

Zobacz https://github.com/bard/mozrepl/wiki . MozRepl pozwala łączyć się przez telnet, w połączeniu z netcat byłoby to dokładnie to, czego potrzebujesz.


Dzięki. Czy przeglądarka nadal jest otwierana normalnie? Tak jak powiedziałem, chcę wprowadzić ostateczne zmiany i przesłać je ręcznie.
— Martin Scharrer

Tak, po uruchomieniu Firefoksa normalnie możesz się do niego telnetować.
— artistoex,

Dzięki. Doprowadziło mnie to do pomysłu, że mogę to rozwiązać również za pomocą skryptu użytkownika, który jest prostszy (patrz moja odpowiedź). Za chwilę zaakceptuję twoją odpowiedź.
— Martin Scharrer

3

Rozwiązałem to teraz za pomocą skryptu Greasemonkey, który kopiuje parametry adresu URL do formularza. Wywołania Makefile firefoxz adresem URL zawierającym parametry.

To działa na moje potrzeby. W przypadku bardziej skomplikowanych danych wejściowych potrzebne są pewne udoskonalenia, np. Kodowanie adresów URL.

Skrypt użytkownika:

// ==UserScript==
// @name           Fill CTAN upload form
// @namespace      http://www.scharrer-online.de/namespace/
// @description    Fills the CTAN upload form with the data provided as URL variables
// @include        http://*.ctan.org/upload.html*
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

//var $ = unsafeWindow.jQuery;

// From http://papermashup.com/read-url-get-variables-withjavascript/
// Added: decodeURI
function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = decodeURI(value);
    });
    return vars;
}

var vars = getUrlVars();

for (name in vars) {
    $("input[name=" + name + "]").val(vars[name]);
    $("select[name=" + name + "]").find("option:selected").removeAttr('selected');
    $("select[name=" + name + "]").find("option[value=" + vars[name] + "]")
            .attr('selected','selected');
}

if ('DoNotAnnounce' in vars) {
    var val = vars['DoNotAnnounce'].toLowerCase();
    if (val == '1' || val == 'yes' || val == 'true') {
        $("input[name=DoNotAnnounce]").attr('checked','checked');
    }
}

Makefile:

# CTAN Upload
CTAN=http://dante.ctan.org/upload.html
CONTRIBUTION=filemod
VERSION=
NAME=John Doe
EMAIL=john.doe@somewhere.com
SUMMARY=Updated to ${VERSION}:
DIRECTORY=/macros/latex/contrib/${CONTRIBUTION}
DONOTANNOUNCE=
ANNOUNCEMENT=
NOTES=
LICENCE=free
FREEVERSION=lppl
#FILE= # can't be set because of security limitations

upload: ctanify
    firefox 'http://dante.ctan.org/upload.html?contribution=${CONTRIBUTION}&version=${VERSION}&name=${NAME}&email=${EMAIL}&summary=${SUMMARY}&directory=${DIRECTORY}&DoNotAnnounce=${DONOTANNOUNCE}&announce=${ANNOUNCEMENT}&notes=${NOTES}&license=${LICENCE}&freeversion=${FREEVERSION}' &
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.