Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: pkill - 06.02.26 - klo:18.38

Otsikko: Digilehtien lataaminen xdotoolin avulla
Kirjoitti: pkill - 06.02.26 - klo:18.38
Tuli tuossa pähkäiltyä helppoa tapaa ladata digilehtiä, eikä valmista sovellustakaan moiseen tuntunut löytyvän, niin hoksasin, että homman voi automatisoida xdotoolilla, joka tekee näppäinpainalluksia ohjelmallisesti.

Tuo skripti toimii kaikille digilehdille, joiden sivun voi tulostaa ctrl+p näppäimellä. Esim. https://nakoislehti.media.fi/itasavo/7bfa9397-eda9-4923-a540-29ad08535271/1?lang=fi

Xdotool ei toimi Waylandissa, joten tuo on kätevä vaikka gnome boxesin virtuaalikoneeseen asentaa Lubuntu tai joku muu X ikkunointia käyttävä kevyt Linux, niin se voi suorittaa talteenottoa taustalla. Kannattaa tehdä virtuaalikoneesta riittävän suuri, sillä pdf sivut vie kymmeniä megatavuja kappale ja tila loppuu nopeasti kesken jos on paljon sivuja ladattavana.

Firefox tuntui olevan toimivin selain ensimmäisen sivun tabulaattorin suhteen. tabulaattorin toiminnon voi myös korvata kahdella ctrl+p näppäimellä, mutta huomasin tuon tuottavan jollain sivuilla pidempiä tiedostonimiä. Skriptin alussa voi määritellä viiveitä ja toistomääriä. Esikatselun viiveitä lyhentämällä säästää paljon aikaa, mutta jos se ei kerkeä latautumaan, niin tuloksena on tyhjä sivu, joten liian tarkalle ei kannata virittää.

Ohje:

Asenna xdotool
sudo apt install xdotool

Tallenna skripti vaikka lehtilatain.sh ja anna sille suoritusoikeudet. Käynnistä terminaalissa ./lehtilatain.sh avaa sitten heti esille Firefox selaimessa auki oleva digilehti ja se alkaa näpyttelemään sivuja talteen.

Koodia: [Valitse]
#!/usr/bin/env bash
#
# Skripti, joka automatisoi toistuvaa Ctrl+P \u2192 navigointi \u2192 valinta -toimintoa

set -u    # est�� m��rittelem�tt�mien muuttujien k�yt�n

# ==================
#  Asetukset / viiveet
# ==================

ALOITUSVIIVE=5           # sekuntia ennen ohjelman aloittamista

TABULAATTORIPAINALLUKSET_SIVU_1=6       # alkukierroksella / ensimm�isell� kerralla (Firefox=6, Chromiumissa joskus 5)
TABULAATTORIPAINALLUKSET_LOPPUSIVUT=2   # p��silmukan jokaisella kierroksella
TABULAATTORIVIIVE=0.25            # pieni viive tabulaattori painallusten v�liss�

ESIKATSELUVIIVE=10         # kauanko odotetaan Ctrl+P j�lkeen (valikko aukeaa)
TULOSTUSIKKUNAVIIVE=10       # odotusviive tulostusikkunan avauduttua

VIIVE_ENNEN_ESC_NAPPAINTA=3         # viive ennen esc-n�pp�imi� SIVUN tallennuksen j�lkeen
KIERROSTEN_VALINEN_VIIVE=2  # ylim��r�inen viive kierrosten v�liin, ett� uusi sivu kerke�� latautumaan

KIERROKSET=40                 # montako kertaa toistetaan

# ==================
#  Ensimm�inen sivu / ensimm�inen tulostus vaatii enemm�n tabulaattoripainalluksia.
# ==================

echo "Alustava suoritus (kierros 0/aloitus)..."

sleep "$ALOITUSVIIVE"

xdotool key ctrl+p
sleep "$ESIKATSELUVIIVE"

# Navigoidaan tulosta nappulaan (m��r� voi vaihdella selaimesta riippuen)
echo "   \u2192 Painetaan Tab ${TABULAATTORIPAINALLUKSET_SIVU_1} kertaa..."
for ((i=1; i<=TABULAATTORIPAINALLUKSET_SIVU_1; i++)); do
    xdotool key Tab
    sleep "$TABULAATTORIVIIVE"
done

xdotool key Return
sleep "$TULOSTUSIKKUNAVIIVE"

xdotool key Return
sleep 3

xdotool key Return
sleep 4

# Suljetaan mahdolliset avoimet valikot/ikkunat
for ((i=1; i<=4; i++)); do
    xdotool key 0xff1b
    sleep 0.2
done

# Seuraava sivu. Nuoli oikealle
xdotool key Right       
sleep 2

# ==================
#  P��silmukka
# ==================

echo "Aloitetaan $KIERROKSET kierrosta..."

for ((round=1; round<=KIERROKSET; round++)); do
    printf "Kierros %2d / %d\n" "$round" "$KIERROKSET"

    # Ctrl+P \u2192 avaa esikatseluvalikko
    xdotool key ctrl+p
    sleep "$ESIKATSELUVIIVE"

    echo "   \u2192 Painetaan Tab ${TABULAATTORIPAINALLUKSET_LOPPUSIVUT} kertaa..."
    for ((i=1; i<=TABULAATTORIPAINALLUKSET_LOPPUSIVUT; i++)); do
        xdotool key Tab
        sleep "$TABULAATTORIVIIVE"
    done

    # Valitaan eka ehdotus
    xdotool key Return
    sleep "$TULOSTUSIKKUNAVIIVE"

    # Seuraavat enterit
    xdotool key Return
    sleep 3

    xdotool key Return
    sleep 4

    # Esc nelj� kertaa. Sulkee esikatseluikkunan ja mahdolliset h�iri�t, est�� my�s viimeisen sivun tallentamisen yh� uudestaan.
    for ((i=1; i<=4; i++)); do
        xdotool key 0xff1b
        sleep 0.2
    done
    # Seuraava sivu. Nuoli oikealle
    xdotool key Right
    sleep 0.3

    # Varmuuden vuoksi pieni heng�hdystauko kierrosten v�liin
    sleep "$KIERROSTEN_VALINEN_VIIVE"
done

echo "Valmis! Tehtiin $KIERROKSET kierrosta."


Waylandille on olemassa ydotool, jolla vastaavien toimintojen pitäisi onnistua, mutta en sitä itse saanut toimimaan.