Comment exporter la liste des onglets Chrome ouverts?

44

La fonction de synchronisation de Chrome ne détecte pas tous les onglets ouverts sur mon téléphone Android.

Les onglets sont-ils stockés dans un fichier quelque part auquel je peux accéder?

Mon intention est d'exporter la liste des onglets afin de pouvoir effectuer une réinitialisation d'usine sur le périphérique.

Exécution d'Android 4.3

Majjo
la source
J'aimerais qu'il y ait un ajout à cet effet.
neverMind9
Il devrait y avoir un moyen autonome sans racine pour le faire. Parce que le chargeur de démarrage efface. Celui qui a inventé le bootloader wipe mal de tête devrait être renvoyé immédiatement. Le chargeur de démarrage est un piège. Le déverrouillage oblige à effacer la totalité des données, et certaines parties ne peuvent pas être sauvegardées sans le déverrouiller en premier lieu. Cercle vicieux. Et puis il y a le cryptage et la migraine ARM TrustZone également.
neverMind9

Réponses:

35

Vous pouvez utiliser la fonctionnalité Appareils distants du débogueur de Chrome pour vous connecter à Chrome sur l'appareil et accéder aux onglets. Développez simplement la liste des onglets visibles pour obtenir la liste complète, puis mettez en surbrillance et copiez tout ce qui est affiché (y compris les URL) dans le Presse-papiers: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

J'ai juste réussi à exporter ~ 400 onglets de cette façon.

Jeremy Taylor
la source
3
je voulais mentionner que la liste de débogage de chrome raccourcira les URL si elles sont trop longues, alors au lieu de copier-coller, vous pouvez obtenir les URL directement en utilisant la méthode
décrite dans
@ woojoo666: On dirait que les choses ont changé dans Chrome et que maintenant, la réponse de Louis tronque également la fin de nombreuses URL. On dirait que toute URL de plus de 100 caractères - ce qui dans mon cas représente environ 50% de tous mes onglets ouverts - manquera sa fin.
peterflynn
@peterflynn fonctionne toujours pour moi. Vient d'exporter une URL de 432 caractères. Juste pour vous assurer que vous ouvrez les outils de développement dans une fenêtre contextuelle, accédez au volet "périphériques distants", puis utilisez ctrl-shift-J pour ouvrir une seconde fenêtre d'outils de développement, puis utilisez le script fourni. ici , correct?
woojoo666
Quelle est la version minimale requise d'Android pour cela?
neverMind9
Je souhaite qu'il y ait un moyen autonome de le faire. Sans compter sur des méthodes externes. Je sais qu'il existe une liste d'onglets racine, mais mon téléphone portable n'est pas enraciné, car les gens disent qu'il existe un risque de dysfonctionnement.
neverMind9
25

Je viens juste de rejoindre ce StackExchange pour montrer notre appréciation de la réponse de Jeremy ci-dessus, et également pour ajouter les quelques lignes de JS que j’utilisais pour exporter la liste des onglets (car la copie avec le curseur n’est pas idéale!)

Comme Jeremy l'a dit, sélectionnez Remote devicessous l' icône de More toolsChrome devtools (en haut à droite du panneau):

  • configurer le débogage USB sur votre téléphone (sous SettingsDeveloper options, racine non requise)
    • notez que vous devez activer le Developer optionsmenu, il est masqué par défaut pour protéger les utilisateurs
    • sur mon téléphone, il fallait appuyer plusieurs fois sur le numéro de build sous SettingsAbout Device
  • Une fois cela fait, branchez votre clé USB et autorisez la connexion MTP
  • lorsque le panneau des appareils distants Chrome devtools est ouvert, le téléphone demande alors d'autoriser le débogage USB.
    • vous pouvez choisir de toujours faire confiance à l'ordinateur

Maintenant, l'appareil est connecté,

  • ouvrez une deuxième vue devtools sur la vue devtools à partir de laquelle vous avez sélectionné Remote devicesla possibilité de récupérer la liste des onglets à l'aide de JavaScript
    • notez que vous devez avoir devtools en mode pop-out (utilisez le symbole des points de suspension verticaux en haut à droite du panneau) pour pouvoir le visualiser, sinon Command + Option + J (MAC) Ctrl+ Shift+ J(WINDOWS) se ferme le premier panneau devtools.
  • Développez la liste des premiers éléments à tous les onglets en cliquant sur "Afficher plus".
  • pour écrire un script dans la liste, utilisez les quelques lignes de code suivantes [entrées dans la console de la deuxième fenêtre de devtools]
    • NB /deep/est le sélecteur CSS pour entrer #shadow-rootdes éléments DOM

Pour exporter une liste de toutes les URL ouvertes sur Chrome pour Android, j'ai choisi de simplement transformer la liste en chaîne de texte formatée par démarquage et de la copier dans le presse-papiers.

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)

Vous aurez alors une liste sur votre presse-papiers ressemblant à ceci:

[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)
...

Mise à jour

Pour une raison quelconque, je reçois parfois une erreur , disant que l' hrefattribut d'un nullélément n'était pas obtenu (lorsque je l'inspecte, il s'agit d'un nœud invisible qui sait). Pour contourner ce problème, utilisez plutôt cette version:

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)
Louis Maddox
la source
1
Chrome changé, 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}))fonctionnera maintenant
dlamotte
Notez qu'en utilisant cette technique, toute fin d'URL de plus de 100 caractères aura sa fin coupée.
peterflynn
@peterflynn fonctionne toujours pour moi. Je viens d'exporter une URL qui était de 432 caractères. Assurez-vous que vous utilisez le script fourni par
diamotte
1
Cela a encore changé. Pour la version de chrome "73.0.3683.75 (version officielle) (64 bits)": 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')}))(je ne pouvais pas accéder à la racine fantôme finale via un sélecteur, mais je devais utiliser à la place la .shadowRootpropriété de son élément host. Je ne sais pas exactement pourquoi, mais hé, non pris en charge.
Adrian
1
Juste au cas où quelqu'un d'autre aurait des problèmes, j'avais des problèmes pour exécuter certains de ces scripts (il martelait la pile USB du noyau avec une utilisation de 100% pendant plus de 10 minutes avant de l'arrêter). Le meilleur moyen que j'ai trouvé était de sélectionner l'élément HTML parent dans l'inspecteur d'outils de développement de chrome (utilisez le bouton du curseur en haut à gauche de la fenêtre des outils de développement imbriqués pour sélectionner un élément aléatoire dans la liste, puis sélectionner l'élément parent), puis clic droit -> "Editer en HTML" -> copier dans un autre fichier texte. Ensuite, il était plus facile et beaucoup plus rapide d'adapter les scripts ci-dessus pour qu'ils fonctionnent sur cette copie HTML locale (ou BASH)
JZL003
13

Je suis tombé sur cette solution lorsque je cherchais à récupérer des onglets qui avaient été définitivement fermés après la panne de mon navigateur. Pour accéder aux informations dont vous avez besoin, votre appareil doit être rooté afin que vous puissiez exécuter une application d'exploration de fichiers avec accès aux fichiers racine installés sur votre appareil. ES File Explorer ou Root Explorer sont mes recommandations.

  1. Naviguez jusqu'au dossier racine de votre appareil (la partition système protégée) → sélectionnez DATA→ sélectionnez com.android.chrome.

  2. Il existe plusieurs endroits où vous pouvez trouver des informations sur vos onglets actuels.

    1. Le premier dossier à vérifier est app_tabsalors 0. Dans ce dossier, il devrait y avoir un fichier appelé tab_statecontenant une liste de tous vos onglets actuels.
    2. Il y a aussi d' autres fichiers dans ce dossier appelé tab3, tab4etc. qui contiennent les informations sur les onglets actuels.
    3. OMI, vous avez besoin d’un "éditeur de texte / éditeur SQL" spécial pour lire le contenu de certains de ces fichiers car le codage est différent.
  3. Le prochain endroit à regarder est /data/com.android.chrome/app_chrome/Default/. Dans ce dossier, vous trouverez un fichier appelé History. Selon votre situation, vous trouverez peut-être ici une bonne liste de visites de sites récentes.

  4. Enfin, accédez au Sync Data folder. Ici, vous trouverez les informations synchronisées avec Google (et cela devrait inclure tous les onglets que vous avez synchronisés sur d'autres appareils).

    • Dans le fichier SyncData.sqlite3, vous trouverez également un historique de toutes vos recherches sur Google (ce que je trouve parfois être une lecture intéressante).
    • Vous aurez besoin d' un navigateur de données Sqlite3 programme sur votre PC pour lire ce fichier. L'application devrait être en mesure d'exporter vers un très utilisable .CSVou .XLSfichier que vous pouvez ouvrir dans MS Excel .

Cela pourrait être utile à quelqu'un que je suppose.

Michael
la source
5

Si les outils de ligne de commande Android sont installés sur une machine de développement et avez activé le débogage USB sur votre périphérique Android, vous pouvez procéder comme suit:

  • Exécutez adb forward tcp:9222 localabstract:chrome_devtools_remotesur votre machine de développement.

    Les instances de Chrome permettent d'accéder à un protocole de débogage via une socket de domaine unix avec l' adresse abstraite " chrome_devtools_remote" - la commande adb ci-dessus transfère les demandes au port 9222, à cette socket. (Vous pouvez obtenir une liste de tous les sockets du domaine Unix sur le périphérique Android en tapant adb shell cat /proc/net/unix.)

  • Le protocole de débogage expose les données JSON relatives à l'instance de chrome sur HTTP. Un fichier JSON listant les onglets ouverts peut être obtenu en s’exécutant wget -O tabs.json http://localhost:9222/json/list.

    (Vous pouvez trouver d'autres points de terminaison de l'API à l' adresse https://github.com/buggerjs/bugger-daemon/blob/master/README.md#api .)

Voir ici pour plus de détails sur l' activation de débogage USB, et ici pour un aperçu de la façon dont cela fonctionne.

phlummox
la source
2

Cette solution de contournement vous donnera un fichier texte avec des URL individuelles pour tous les onglets que vous avez ouverts dans Chrome pour Android.

  1. Comme mentionné dans cette réponse de Michael , vous devez récupérer le fichier contenant les onglets actuels. À l'aide d'un explorateur racine sur le périphérique, récupérez ce fichier et déplacez-le dans le dossier de votre choix dans Windows:/data/data/com.android.chrome/app_tabs/0/tab_state

  2. Installer les outils GNU pour Windows

  3. Parfois, il y a une étrange flèche dans le fichier qui bousille le script. Si vous exécutez le script et qu'il tronque une partie du fichier, examinez le dernier caractère et il s'agira probablement de ce caractère de flèche étrange. Recherchez / remplacez-le dans le fichier d'origine. Une fois qu'il est parti, le script fonctionnera correctement. Cela ressemble à ceci:-->

  4. Allez à la ligne de commande (allez à "Run" ou Win+ R, et tapez cmd) et naviguez jusqu'au dossier qui contient sed.exe(où que vous ayez été installé à l'étape 2).

  5. Vous voudrez probablement déplacer le fichier d'origine ( tab_state) dans le même dossier que celui-ci sed.exe. Ça va tout rendre plus facile. Une fois que vous avez fait cela, lancez ce script:

    sed -i "s/.\{6\}http/\r\n\r\nhttp/g" tab_state
    
  6. Cela modifiera le fichier avec toutes les URL formatées correctement. Ouvrez le fichier en tant que fichier texte, puis copiez et collez le contenu dans un document Word ou à un autre emplacement. Pour une raison quelconque, si vous ne copiez pas et ne collez pas les données, lorsque vous enregistrez le fichier, tous les sauts de ligne / retours à la ligne sont effacés. Si les choses tournent mal, recommencez et recommencez. Une fois que tout est dit et fait, vous devriez avoir un fichier qui contient une liste de liens vers tous les onglets que vous aviez ouverts auparavant.

Darren
la source
2

Instructions pour Brave! Vous pouvez remplacer le code dans la console de Louis Maddox par celui-ci, cela fonctionne à partir d’aujourd’hui Brave Version 1.0.0 Chromium: 78.0.3904.97 (Official Build) (64-bit). Remarque: Vous pouvez ouvrir une nouvelle fenêtre de console de la fenêtre des périphériques distants si vous activez la fenêtre du périphérique distant et appuyez surCtrl+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)

Ensuite, vous pouvez coller tous vos onglets dans un fichier texte.

Si vous voulez ouvrir tous les onglets de votre appareil actuel, remplacez la tabs.forEachpartie par

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

N'essayez pas cela avec trop d'onglets ouverts sur votre appareil, cependant.

J'ai ajouté ceci après la tabspartie pour synchroniser manuellement les onglets ouverts (il manque encore cette fonctionnalité et j'avais 650 onglets ouverts sur mon appareil mobile) en charge de 50 onglets:

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

Cela ouvrira un lot de 50 onglets de votre appareil dans la fenêtre de navigateur ouverte. Il montre également le nombre total d'onglets. Ne fermez pas cependant l'onglet "vide" de ces outils de développement et du périphérique distant si vous souhaitez ouvrir un autre lot. Avec Ctrl + TABvous passez d’un onglet à l’autre, Ctrl +Dmarquez-le et Ctrl+Wfermez l’onglet actif. C'est comme cela que je l'ai fait manuellement. N'hésitez pas à proposer des modifications à ce code pour rendre la vie de tous plus facile.

Simonsan
la source
1

Michael a identifié le fichier tab_state, il reste à le décoder. Le script suivant a fonctionné pour moi (dans le kitkat KSH_VERSION = '@ (#) MIRBSD KSH R43 2013/02/19' ou xenial BASH_VERSION = 'version 4.3.46 (1)' sur un fichier tab_state à partir de Chrome 49.0.2623.105), il imprime d'abord la dernière URL, il supprime tout octet non imprimable et tous les octets suivants entre les URL, et davantage si nécessaire afin de supprimer au moins 2 octets. Après chaque URL, il affiche un espace, puis les octets imprimables contigus supprimés, le cas échéant, puis une virgule, puis le nombre d’octets supprimés (et les octets entre parenthèses). Pour imprimer les URL, utilisez uniquement la commande echo commentée.

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
Gregrwm
la source
1

Vous devez être root ou Chrome pour lire /data/data/com.android.chrome/app_tabs/0/tab_state0

Vous pouvez utiliser cet exploit dirtycow sur des périphériques vulnérables pour devenir Chrome et obtenir tab_state0un périphérique connecté:

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

Une fois que vous avez accès à tab_state0, extrayez les URL:

LC_ALL=C grep -a -o 'http[[:print:]]*' tab_state0
tekumara
la source
1

Sous Windows, pour extraire tab_state0une archive TitaniumBackup (qui fonctionne sur les téléphones rootés)

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

Pour obtenir la liste des onglets de tab_state0

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

Sur Windows, je voudrais installer https://scoop.sh/ puisscoop install busybox 7zip

raisercostin
la source
1

La réponse la plus récente de simonsan ne fonctionne pas sur ma version actuelle de Chrome 75.0.3770.100. Je n'ai pas la vboxclasse utilisée dans chaque script posté, alors j'ai réussi à écrire un code qui fonctionne maintenant:

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

J'ai trouvé le message de Louis Maddox et ses captures d'écran très utiles pour déchiffrer son script. Voici donc le mien avec l'arbre mis à jour.

capture d'écran


Quoi qu'il en soit, les solutions proposées pour surmonter le cap des 100 caractères ne fonctionnaient pas pour moi. J'ai donc décidé de modifier inspect.jsle code source à partir des sources en procédant comme suit:

  1. Téléchargez le chrome-pak-customizer et décompressez-le.
  2. De C:\Program Files (x86)\Google\Chrome\Application\75.0.3770.100(où 75.0.3770.100est le nom de la construction), copiez le resources.pakdans votre dossier Documents, faites-le glisser et déposez-le unpack.batdans le dossier décompressé.
  3. En \document\resources_unpaked\prendre le 11208.jset l'ouvrir.
  4. Sur la ligne 537 ou en cherchant 100il y a ces lignes
  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. Enregistrez le fichier et dans le même dossier glisser pak_index.iniet déposez - le sur la pak.bat. maintenant, le resource.pakdans \documents\a été mis à jour avec les modifications.
  2. Faites une sauvegarde de resource.pakparce que vous ne savez jamais, fermez Chrome et remplacez l'originale par la version mise à jour.

Maintenant, le script affichera jusqu'à 300 caractères pour les URL.

priorincantatio
la source