Come posso esportare l'elenco di schede di Chrome aperte?


44

La funzione di sincronizzazione di Chrome non raccoglie tutte le schede aperte sul mio telefono Android.

Le schede sono memorizzate in un file da qualche parte a cui posso accedere?

La mia intenzione è quella di esportare l'elenco di schede in modo da poter eseguire un ripristino di fabbrica sul dispositivo.

Esecuzione di Android 4.3


Vorrei che ci fosse un componente aggiuntivo a tale scopo.
neverMind9

Dovrebbe esserci un modo autonomo rootless per farlo. Perché cancellare bootloader. Chiunque abbia inventato il mal di testa che cancella il bootloader dovrebbe essere licenziato immediatamente. Il bootloader è una trappola. Lo sblocco costringe a cancellare tutti i dati e non è possibile eseguire il backup di alcune parti senza prima sbloccarli. Circolo vizioso. E poi c'è anche la crittografia e il mal di testa ARM TrustZone.
neverMind9

Risposte:


35

Puoi utilizzare la funzione Dispositivi remoti nel debugger di Chrome per connetterti a Chrome sul dispositivo e accedere alle schede. Espandi l'elenco delle schede visibili per ottenere l'elenco completo, quindi evidenzia e copia tutto ciò che viene mostrato (compresi gli URL) negli Appunti: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

Sono appena riuscito a esportare ~ 400 schede in questo modo.


3
volevo menzionare che l'elenco dei debugger di Chrome accorcerà gli URL se sono troppo lunghi, quindi invece di copiare e incollare, puoi ottenere gli url direttamente usando il metodo nella risposta di Louis Maddox
woojoo666

@ woojoo666: sembra che le cose in Chrome siano cambiate e ora la risposta di Louis tronca anche la fine di molti URL. Sembra che qualsiasi URL di oltre 100 caratteri - che nel mio caso circa il 50% di tutte le mie schede aperte - mancherà la sua fine.
peterflynn,

@peterflynn funziona ancora per me. Ho appena esportato un URL di 432 caratteri. Solo per essere sicuri, stai aprendo gli strumenti di sviluppo in una finestra pop-out, andando nel riquadro "dispositivi remoti", quindi usando ctrl-shift-J per aprire una seconda finestra di sviluppo di strumenti e quindi usando lo script fornito qui , giusto?
woojoo666,

Qual è la versione Android minima richiesta per farlo?
neverMind9

Vorrei che ci fosse un modo autonomo per farlo. Senza fare affidamento su metodi esterni. Lo so, c'è un elenco di schede Root, ma il mio cellulare non è rootato perché la gente dice che c'è il rischio di un malfunzionamento.
neverMind9

25

Ho appena aderito a StackExchange per mostrare un po 'di apprezzamento per la risposta di Jeremy sopra e aggiungere anche le poche righe di JS che ho usato per esportare l'elenco di schede (dal momento che copiare con il cursore non è l'ideale!)

Come ha detto Jeremy, seleziona Remote devicessotto More toolsl' icona di Chrome devtools (in alto a destra nel pannello):

  • configurare il debug USB sul telefono (sotto SettingsDeveloper options, root non richiesto)
    • si noti che è necessario abilitare il Developer optionsmenu, è nascosto per impostazione predefinita per proteggere gli utenti
    • sul mio telefono è necessario toccare più volte il numero di build sotto SettingsAbout Device
  • una volta fatto, collega la tua USB e consenti la connessione MTP
  • quando il pannello dei dispositivi remoti di Chrome è aperto, il telefono richiederà quindi di consentire il debug USB
    • puoi scegliere di fidarti sempre del computer

Ora il dispositivo è collegato,

  • apri una seconda vista devtools nella vista devtools dalla quale hai selezionato Remote devicesper poter recuperare l'elenco delle schede usando JavaScript
    • nota che devi avere devtools in modalità pop-out (usa il simbolo di ellissi verticali in alto a destra nel pannello) per essere in grado di farlo, altrimenti Command + Option + J (MAC) Ctrl+ Shift+ J(WINDOWS) si chiuderà il primo pannello di devtools.
  • espandi l'elenco dai primi pochi elementi a tutte le schede facendo clic su "Mostra altro"
  • per eseguire lo script sull'elenco, utilizzare le seguenti poche righe di codice [immesse nella console della seconda finestra di devtools]
    • NB /deep/è il selettore CSS per inserire #shadow-rootelementi DOM

Per esportare un elenco di tutti gli URL aperti su Chrome per Android, ho scelto di creare l'elenco in una stringa di testo formattata per il markdown e copiarlo negli Appunti

tabs = Array.from(document.querySelectorAll('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').href}))
str = '';
for (i=0;i<tabs.length;i++){
  str += '['+tabs[i]['name']+']('+tabs[i]['url']+')\n'
}
copy(str)

Avrai quindi un elenco negli appunti simile a questo:

[How can I export the list of open Chrome tabs? - Android Enthusiasts Stack Exchange](https://android.stackexchange.com/questions/56635/how-can-i-export-the-list-of-open-chrome-tabs)
[Get Started with Remote Debugging Android Devices  |  Tools for Web Developers  |  Google Developers](https://developers.google.com/web/tools/chrome-devtools/remote-debugging/)
[How To Enable USB Debugging On Your Android Phone](https://www.groovypost.com/howto/mobile/how-to-enable-usb-debugging-android-phone/)
[Configure On-Device Developer Options | Android Studio](https://developer.android.com/studio/debug/dev-options.html)
...

Aggiornare

Per qualche motivo ricevo un errore qualche volta , dicendo che non è riuscito a ottenere l' hrefattributo di un nulloggetto (quando lo ispeziono è un nodo invisibile, chissà). Per aggirare questo, utilizzare invece questa versione:

tabs = document.querySelectorAll('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ .device-page-list .vbox')
str = '';
for (i=0;i<tabs.length;i++){
  if (tabs[i].querySelector('.device-page-url .devtools-link') != null){
    str += '- ['+tabs[i].querySelector('.device-page-title').textContent + '](' + tabs[i].querySelector('.device-page-url .devtools-link').getAttribute('href') +')\n'
  } else {
    console.log(tabs[i])
  }
}
copy(str)

1
Chrome è cambiato, tabs = Array.from(document.querySelectorAll('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.devtools-link')._href}))ora funzionerà
dlamotte il

Nota che usando questa tecnica, qualsiasi URL di lunghezza superiore a 100 caratteri avrà la sua fine tagliata.
peterflynn,

@peterflynn funziona ancora per me. Ho appena esportato un URL di 432 caratteri. Assicurati di utilizzare la sceneggiatura fornita da
Diamotte

1
È cambiato di nuovo Per la versione di Chrome "73.0.3683.75 (build ufficiale) (64-bit)": tabs = Array.from(document.querySelector('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div.vbox.flex-auto').shadowRoot.querySelectorAll('.devices-view .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').getAttribute('href')}))(Non ho potuto accedere all'ombra-radice finale tramite un selettore, ma ho dovuto usare invece la .shadowRootproprietà del suo elemento host. Non so esattamente perché, ma ehi, non supportato.
Adrian

1
Nel caso in cui qualcun altro abbia dei problemi, ho avuto problemi con l'esecuzione di alcuni di questi script (stava martellando lo stack USB del kernel con un utilizzo del 100% in oltre 10 minuti prima di interromperlo). Il modo migliore che ho trovato è stato selezionare l'elemento HTML padre nella finestra di ispezione degli strumenti di sviluppo di Chrome (utilizzare il pulsante cursore nella parte superiore sinistra della finestra degli strumenti di sviluppo nidificati per selezionare un elemento casuale nell'elenco e quindi selezionare l'elemento principale) e quindi tasto destro del mouse -> "Modifica come HTML" -> copia in un altro file di testo. Quindi è stato più facile e molto più veloce adattare gli script sopra per lavorare su quella copia HTML locale (o BASH)
JZL003

13

Mi sono imbattuto in questa soluzione quando stavo cercando di ripristinare le schede che erano state definitivamente chiuse dopo che il mio browser si era bloccato un giorno. Per accedere alle informazioni richieste, è necessario eseguire il root del dispositivo in modo da poter eseguire un'app di esplorazione file con accesso ai file di root installati sul dispositivo. ES File Explorer o Root Explorer sono i miei consigli.

  1. Passare alla cartella principale del dispositivo (la partizione di sistema protetta) → selezionare DATA→ selezionare com.android.chrome.

  2. Esistono diversi luoghi in cui è possibile trovare informazioni sulle schede correnti.

    1. La prima cartella da controllare è app_tabs, quindi 0. In questa cartella dovrebbe esserci un file chiamato tab_stateche contiene un elenco di tutte le schede correnti.
    2. Ci sono anche altri file in questa cartella chiamati tab3, tab4ecc che contengono informazioni sulle schede attuali.
    3. IMO, è necessario uno speciale "editor di testo / editor sql" per leggere il contenuto di alcuni di questi file poiché la codifica è diversa.
  3. Il prossimo posto dove guardare è /data/com.android.chrome/app_chrome/Default/. In questa cartella troverai un file chiamato History. A seconda della situazione, è possibile trovare un buon elenco delle visite recenti al sito qui.

  4. Infine, vai al Sync Data folder. Qui troverai le informazioni sincronizzate con Google (e ciò dovrebbe includere tutte le schede che hai sincronizzato su altri dispositivi).

    • Nel file SyncData.sqlite3troverai anche una cronologia di tutte le tue ricerche su Google (che a volte trovo essere una lettura interessante).
    • Avrai bisogno di un programma per browser di dati Sqlite3 sul tuo PC per leggere questo file. L'app dovrebbe essere in grado di esportare in un file .CSVo .XLSfile altamente utilizzabile che è possibile aprire in MS Excel .

Questo potrebbe essere utile a qualcuno presumo.


5

Se hai gli strumenti della riga di comando di Android installati su una macchina di sviluppo e hai abilitato il debug USB sul tuo dispositivo Android, puoi effettuare le seguenti operazioni:

  • Eseguire adb forward tcp:9222 localabstract:chrome_devtools_remotesulla macchina di sviluppo.

    Le istanze di Chrome espongono l'accesso a un protocollo di debug tramite un socket di dominio unix con l' indirizzo astratto " chrome_devtools_remote" - il comando adb sopra inoltra le richieste alla porta 9222 su quel socket. (È possibile ottenere un elenco di tutti i socket di dominio unix sul dispositivo Android digitando adb shell cat /proc/net/unix.)

  • Il protocollo di debug espone i dati JSON sull'istanza di Chrome su HTTP. Un file JSON che elenca le schede aperte può essere ottenuto eseguendo wget -O tabs.json http://localhost:9222/json/list.

    (Altri endpoint dell'API sono disponibili all'indirizzo https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api .)

Vedi qui per maggiori dettagli su come abilitare il debug USB e qui per una panoramica di come funziona.


2

Questa soluzione alternativa ti fornirà un file di testo con singoli URL per tutte le schede che hai aperto in Chrome per Android.

  1. Come menzionato in questa risposta da Michael , devi prendere il file che contiene le schede correnti. Usando un root explorer sul dispositivo, prendi questo file e spostalo nella cartella che hai scelto in Windows:/data/data/com.android.chrome/app_tabs/0/tab_state

  2. Installa GNU Tools per Windows

  3. A volte c'è un strano carattere a freccia nel file che rovina lo script. Se esegui lo script e tronca parte del file, guarda l'ultimo carattere e probabilmente sarà quello strano carattere a freccia. Trova / sostituiscilo nel file originale. Una volta sparito, lo script funzionerà bene. Sembra così:-->

  4. Vai al prompt della riga di comando (vai su "Esegui" o Win+ Re digita cmd) e vai alla cartella che contiene sed.exe(ovunque tu l'abbia installato nel passaggio 2.)

  5. Probabilmente vorrai spostare il file originale ( tab_state) nella stessa cartella contenente sed.exe. Renderà tutto più facile. Una volta fatto, esegui questo script:

    sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
    
  6. Ciò modificherà il file con tutti gli URL formattati correttamente. Apri il file come file di testo, quindi copia e incolla il contenuto in un documento di Word o in un'altra posizione. Per qualche motivo, se non copi e incolli i dati, quando salvi il file cancella tutte le interruzioni di riga / ritorni a capo. Se le cose si rovinano, basta ricominciare e farlo di nuovo. Al termine, è necessario disporre di un file che contiene un elenco di collegamenti a tutte le schede aperte in precedenza.


2

Istruzioni per Brave! Puoi sostituire il codice nella console di Louis Maddox con questo, questo funziona da oggi Brave Version 1.0.0 Chromium: 78.0.3904.97 (Official Build) (64-bit). Nota: è possibile aprire una nuova finestra della console della finestra dei dispositivi remoti se si attiva la finestra del dispositivo remoto e si premeCtrl+Shift+J

tabs = Array.from(document.querySelector('div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div /deep/ div.vbox.flex-auto').shadowRoot.querySelectorAll('.devices-view .device-page-list .vbox'), s => ({name: s.querySelector('.device-page-title').textContent, url: s.querySelector('.device-page-url .devtools-link').getAttribute('href')}))

str = ' ';

tabs.forEach(e => {
    str += '- ['+ e.name + '](' + e.url +')\n';
})
copy(str)

Quindi puoi incollare tutte le tue schede in un file di testo.

Se vuoi aprire tutte le schede sul tuo dispositivo reale sostituisci tabs.forEach-part con

tabs.forEach(e => {
    window.open(e.url, '_blank');
})

Tuttavia, non provarlo con troppe schede aperte sul dispositivo.

Ho aggiunto questo dopo la tabsparte per sincronizzare manualmente le schede aperte (coraggiosa manca ancora questa funzione e avevo 650 schede aperte sul mio dispositivo mobile) con un addebito di 50 schede:

i=0;
j=0;
tabs.forEach(e => {
  if(i<50){
    i++;
    window.open(e.url, '_blank');
  }
  j++;
})
console.log("Tabs overall:"+j);

Questo aprirà un batch di 50 schede dal tuo dispositivo nella finestra del browser aperta. Mostra anche il conteggio complessivo delle schede. Non chiudere la restante scheda 'vuota' per quegli strumenti di sviluppo e il dispositivo remoto, se si desidera aprire un altro batch. Con Ctrl + TABsi passa attraverso le schede, Ctrl +Ddi bookmark loro e Ctrl+Wper chiudere scheda attiva. È così che l'ho fatto manualmente, non esitare a proporre modifiche a questo codice per rendere la vita di tutti più facile.


1

Michael ha identificato il file tab_state, resta da decodificarlo. Il seguente script ha funzionato per me (in kitkat KSH_VERSION = '@ (#) MIRBSD KSH R43 2013/02/19' o xenial BASH_VERSION = '4.3.46 (1) -release' su un file tab_state da Chrome 49.0.2623.105), stampa prima l'ultimo URL, tra gli URL rimuove qualsiasi byte non stampabile e tutti i byte seguenti e altro se necessario, quindi vengono rimossi almeno 2 byte. Seguendo ogni URL stampa uno spazio, quindi i byte stampabili contigui rimossi, se presenti, quindi una virgola, quindi il numero di altri byte rimossi (e detti byte tra parentesi). Per stampare gli URL utilizzare invece solo il comando echo commentato.

tab_state=/data/data/com.android.chrome/app_tabs/0/tab_state
[[ $KSH_VERSION ]]||shopt -s extglob       #set if bash
(cat $tab_state;echo)|while read -r r;do b=
   while
      q=${r%http?(s)://*}          #chip off a URL
      [[ $q = *url= ]]&&{
         p=${r%http?(s)://*url=*}  #special case URL within URL
         [[ $p = "$r" ]]||q=$p;}
      h=${r:${#q}}                 #the chip
      h=${h%%[! -~]*}              #remove unprintable&following bytes
      u=$((${#r}-${#q}-${#h}))     #no of said bytes removed
      p=$((u<b?b-u:0))             #no of more bytes to remove
      [[ $h ]];do
         echo "${h::${#h}-p} ${h:${#h}-p},$u(${r:${#r}-u})"
      #  echo "${h::${#h}-p}"
         r=$q b=2
   done
done

1

Devi essere root o Chrome per leggere /data/data/com.android.chrome/app_tabs/0/tab_state0

Puoi utilizzare questo exploit dirtycow su dispositivi vulnerabili per diventare Chrome e ottenere tab_state0da un dispositivo collegato:

make root
adb shell
run-as com.android.chrome
chmod 711 /data/data/com.android.chrome/app_tabs/0
chmod 644 /data/data/com.android.chrome/app_tabs/0/tab_state0
exit
cp /data/data/com.android.chrome/app_tabs/0/tab_state0 /sdcard/
exit
adb pull /sdcard/tab_state0

Una volta che hai accesso a tab_state0, estrarre gli URL:

LC_ALL=C grep -a -o 'http[[:print:]]*' tab_state0

1

In Windows, per estrarre tab_state0da un archivio TitaniumBackup (che funziona su telefoni con root)

7z e TitaniumB\com.android.chrome-20180918-001302.tar.gz -so | 7z e -si -ttar tab_state0 -r

Per ottenere l'elenco delle schede da tab_state0

sed -b "s/^.\{20\}//g" tab_state0 | sed -b "s/.\{6\}http/\nhttp/g" > my-tabs.md

Su Windows installerei quindi https://scoop.sh/scoop install busybox 7zip


1

La risposta più recente di simonsan non funziona sul mio attuale build di Chrome 75.0.3770.100. Non ho la vboxclasse utilizzata in ogni script pubblicato, quindi sono riuscito a scrivere un codice che funziona ora:

tabs = document.querySelectorAll('#devices div /deep/ div /deep/ div /deep/ div /deep/ .row')
str = '';
for (i=0;i<tabs.length;i++){
  if (tabs[i].querySelector('.name').innerText != null){
    str += '- ['+tabs[i].querySelector('.name').innerText + '] (' + tabs[i].querySelector('.url').innerText +  ')\n'
  } else {
    console.log(tabs[i])
  }
}

Ho trovato molto utili il post e gli screenshot di Louis Maddox per decifrare la sua sceneggiatura, quindi ecco il mio con l'albero aggiornato.

immagine dello schermo


Ad ogni modo le soluzioni proposte per superare il limite massimo di 100 caratteri non hanno funzionato per me, quindi ho deciso di modificare inspect.jsil codice sorgente seguendo questi passaggi:

  1. Scarica il chrome-pak-customizer e decomprimilo.
  2. Da C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100(dove si 75.0.3770.100trova il nome della build) crea una copia resources.paknella cartella Documenti, trascina la copia e rilasciala unpack.batnella cartella decompressa.
  3. In \document\resources_unpaked\prendere il 11208.jse aprirlo.
  4. Sulla linea 537 o cercando 100ci sono queste linee
  let text = value ? String(value) : '';
  if (text.length > 100) {
    text = text.substring(0, 100) + '\u2026';
  }

changing the 100 to 300 should be enough, it may cuts some google search links but mine where still working.
  1. Salvare il file e trascinarlo nella stessa cartella pak_index.inie rilasciarlo sul pak.bat. ora resource.pakin \documents\è stato aggiornato con le modifiche.
  2. Fai un backup resource.pakperché non lo sai mai, chiudi Chrome e sostituisci l'originale con la versione aggiornata.

Ora lo script mostrerà fino a 300 caratteri per gli URL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.