DEV Community

loading...

When you never close tabs on your mobile Chrome browser

piczmar_0 profile image Marcin Piczkowski Updated on ・3 min read

Whenever I browse on my mobile I often open an interesting pages in Chrome and leave it for later. Usually the later never comes so I ended up with over 2500 open tabs in my mobile Chrome. Yes, it's not a typo !!!

Recently I wanted to do some cleanup. I was on my desktop and wanted to quickly order useful urls into some categories and bookmark for later or throw away at all if not needed anymore. I realised that there is no handy way of exporting all the open tabs from Chrome. On desktop version of Chrome there is a "Bookmark All Tabs" feature when you right-click any of the open tabs in browser, but this does not exist in mobile version.

I wanted to share with you an easy way to work-around this limitation if you're using an Android device.

You will need to install Android Dev Tools on your desktop and put your mobile device into Developer's Mode.

How to do it, step by step:

  1. Download an install Android Dev Tools.

We will need only adb application, but we will have to install the complete toolbox anyway. Personally, I found the easiest way to download an install the Android Studio, but you could also try the stand-alone sdk tool available from here if you scroll down.

When you have installed Android Studio on Mac, you will find adb in ~/Library/Android/sdk/platform-tools

Open this folder in bash.

  1. Put your Android phone in Developer's Mode and connect with a cable to your desktop. It's better to connect straight instead using some USB hubs, because sometimes the device cannot be discovered by adb. Here is an official instruction how to turn it on. Also, you may want to turn on MTP configuration in "Select USB Configuration" menu as described here, otherwise adb may not find your device.

When you completed the two steps above, you should be able to discover your Android device with adb. Try this from bash in folder where the adb binary is located:

./adb devices -l

It should list your device, e.g:

List of devices attached
e8acbd80               device usb:336592896X product:OnePlus3 model:ONEPLUS_A3003 device:OnePlus3 transport_id:1

Chrome mobile has a feature to expose remote debugger on tcp socket which you can access from your desktop. The so called "legacy" debugging workflow is described in Chrome developers documentation.
It is called "legacy" because now there is more fancy way of debugging mobile Chrome using Chrome Dev Tools.
For our purpose however the "legacy" way is more useful because we get access to a bare text interface in JSON format which gives easy way to extract open tabs URLs.

In short, you need to execute:

./adb forward tcp:9222 localabstract:chrome_devtools_remote

Here is more info how it works. The above line makes adb forward any connections on localhost TCP port 9222 to the abstract socket named chrome_devtools_remote over USB.

Now, you should be able to browse Chrome remote API at: http://localhost:9222

The JSON with all open tabs info is at: http://localhost:9222/json/list

It looks like that:

JSON

If you have JQ tool installed you could parse this JSON, extract only URLs and save in txt file like that:

curl http://localhost:9222/json/list | jq .[].url > mobile.tabs.txt

UPDATE:
(Thanks to Alete for this tip)

If there is more than one instance of chrome running on your Android and ./adb forward tcp:9222 localabstract:chrome_devtools_remote shows you the wrong one, you may need to find the process of the other instance like this:

First disable the undesired chrome app.
How to disable an app?
Find an app in applications.

Find Chrome in applications

Then hold an icon for long time until the popup menu show up.

Show popup menu

Then choose "App info" and you should see the screen like blow.

App info

Next, click "Disable" button.

Then on your PC in command line execute:

adb shell "cat /proc/net/unix" 

Copy the output into a text editor and find chrome_devtools_remote in order to find the instance e.g.:
localabstract:chrome_devtools_remote_31723

Then

./adb forward tcp:9222 localabstract:chrome_devtools_remote_31723

At the end you can enable the app which you disabled in previous steps.

Discussion (30)

pic
Editor guide
Collapse
nowellmorrisla profile image
Nowell Morris

Also, a simple tr helps and removes "

curl http://localhost:9222/json/list | jq .[].url | tr -d '"' > mobile.tabs.txt

Collapse
aletedini profile image
Alete - ฿ 📈 • Edited

For those of you who have more than one instance of chrome running on your Android and ./adb forward tcp:9222 localabstract:chrome_devtools_remote shows you the wrong one, you may need to find the process of the other instance like this:
First I disabled the undesired chrome app (the one of my work profile, in my case), then,
adb shell "cat /proc/net/unix" (I wasn't able to grep that, because it's binary or something like that, I had to copy the output into a text editor and find "chrome_devtools_remote") in order to find the instance that was named: localabstract:chrome_devtools_remote_31723 in my case.
then:
./adb forward tcp:9222 localabstract:chrome_devtools_remote_31723 worked like a charm.

Thanks for this awesome trick!

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Awsome! Thanks for the tip, I will update the post with it.

Collapse
dkodr profile image
Dariusz Kuśnierek • Edited

Thanks a lot! This really helped me :-) I just made a small modification:

To parse the JSON and save it to a Markdown file (with titles and urls):

curl http://localhost:9222/json/list | jq -r ".[] | \"[\" + .title + \"](\" + .url + \")\"" > mobile.tabs.md
Collapse
pierre profile image
Pierre-Henry Soria ✨

Thanks for this great step-by-step tutorial Marcin! I had sometimes about 70~90 tabs opened and, yes indeed, this can definitely be useful for cleaning them up (if you are sure you will read those URLs later). I now try to save interesting URLs to Pocket and read them offline when I have time, but still your trick can be helpful when we are in this kind of situation (especially with ~2500 opened tabs!).

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Glad that I could help. I'm curious why Chrome developers excluded the "Bookmark All Tabs" feature from mobile version, it would be useful so much.

Collapse
666alice999 profile image
Alice Morrison • Edited

Hello. This is what I was looking for. Thanks. But I have Chrome installed on my Android phone and Brave browser (?id=com.brave.browser) which is also based on Chrome. I applied your instructions step by step but it exported Brave browser's tabs. not Chrome's. How can I export chrome tabs?

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Hmmm.. Not sure what is happening. Can you also try these steps: developers.google.com/web/tools/ch...

Or you could try force shutting down Brave and see if that halped.

Collapse
andrizmitnick profile image
andrizmitnick

somehow i always get :(

parse error: Invalid numeric literal at line 3, column 11
Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Can you check in browser on PC when you mapped port using adb command from the post: localhost:9222/json/list ?
Looks like you did not get the JSON from this address.

Collapse
andrizmitnick profile image
andrizmitnick

Hey, thanks for the reply.
it looks like my issue was related to powershell. i need to add Select Content -Expand Content which ended up like this

curl 'http://localhost:9222/json/list' | Select Content -Expand Content | jq .[].url > mobile.tabs.txt
Collapse
poopooracoocoo profile image
Poopooracoocoo

By the way, there's an issue on the Chromium issue tracker bugs.chromium.org/p/chromium/issue... 😊

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Cool, assigned to sb. on 13 March. Looking forward tot have it.

Collapse
poopooracoocoo profile image
Poopooracoocoo

Any ideas on where I can share the issue?

des... is more likely to implement it with more stars! :) btw sb hasn't been on Chromium Bugs in over a year. They probably stopped working there.

Collapse
imikari profile image
Will Wang (IKARi)

Marcin, THANK YOU!! This is so handy and solve my issue :)
Besides, I found that I have to add quotation marks for jq to make it work, FYI !

curl http://localhost:9222/json/list | jq '.[].url'
Collapse
benhadad profile image
benhadad

As a dev I understand the go-to method of writing code to solve a problem. The only issue here is that Chrome has a built-in way to do the same thing. This way does have 1 drawback, and that is it will open all the tabs on your computer first before you can bookmark them.

  1. Open a new chrome window (ctrl-N if you are in chrome)
  2. Go to history (ctrl-h)
  3. Select Tabs from other devices
  4. Find your other device
  5. Click on the action button (three vertical dots) and select open tabs
  6. Allow tabs to start to open, then select bookmark all open tabs (ctrl-Shift-D).

No code option.

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Thanks. This is a good option too as long as you have your mobile Chrome tabs synchronized with Google account. Also, not sure how Chrome desktop browser would handle over 2000 open tabs.

Collapse
okazakikirito profile image
okazakikirito

Hi thanks man this helped lot

Collapse
petruskiendys profile image
Petrus Kiendys

Dzieki Marcin!
Just what I needed to move my open tabs from my phone to the desktop!

Collapse
piczmar_0 profile image
Collapse
peeyu5h profile image
Peeyush Singh

Thanks! Pretty useful. :D

Collapse
sdkb profile image
sdkb

I'm glad there's some way to do this, but it's insane that it has to be this hard. It's a common issue — why can't the Chrome developers add an option for it?

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

I'd like to know it as well.

Collapse
ferret profile image
barpbrap

I have no idea how to do this. where do i even need to type these commands? I am on windows 10

Collapse
shaglock profile image
Ilya Shaplyko

Thank you for this article, very useful.
Also I found jq map({title, url}) much better to fit my purposes :)

Collapse
roronoajohnny profile image
Johnny Bone

Where can I see how many tabs are opened on my android device? I want to check it before I try this method.

Collapse
rfpixel profile image
Rafael H C Petkowicz

Thanks a lot!!!!!!! very useful!!!

Collapse
ranchercz profile image
ranchercz

It's best! but I have two spaces in my xiaomi phone and if I debugging first space all were done, but if I'm in second space, desktop chrome writes me error - webpage is not available and something like server is busy...in this second space I like to debugging because I have approximately 20000 tabs opened.. and what I have to do? Maybe I haven't enought buffer? Help!!

Collapse
piczmar_0 profile image
Marcin Piczkowski Author

Have you tried the trick with disabling one application (one space)? I've just added some more screens to the description.

Collapse
ranchercz profile image
ranchercz

Thanks so much