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.

Martin Scharrer
źródło

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.

artistoex
źródło
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 protected]
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}' &
Martin Scharrer
źródło