Skip to content

Instantly share code, notes, and snippets.

@danfinlay
Last active December 9, 2024 22:31
Show Gist options
  • Save danfinlay/7357098 to your computer and use it in GitHub Desktop.
Save danfinlay/7357098 to your computer and use it in GitHub Desktop.
How to download a streaming video with Google Chrome

How to download streaming video

Streaming just means a download that they don't want you to keep. But Chrome's developer tools make it easy to access what's really going on under the hood.

Open Developer Tools

From the page where you want to download some things, go into your chrome menu to open the developer tools. You can either:

1.  (On a mac): Command-option-J
2.  (On a PC): Control-alt-J
3.  (In your menu on a mac): Open View > Developer > Developer Tools
4.  (On any Chrome machine): The far right menu button, to the right of the URL bar, you can press that, go down to "Tools", then open the "Developer Tools".

Monitor Network Traffic

By clicking the "Network" tab, you'll get a list of all files requested since you opened that tab. Our goal is to isolate the web request that returns the video of your choice. At this point, you can navigate to the video you want, and I'd probably press the "clear" button in the developer tools right before finally pressing the "Play" button on the video, so it can be one of the only transfers you see.

Identify the video transfer

It should be easy to recognize the video transfer: It has a mime type of video, it's a transfer that should take a lot longer than the rest, etc.

Once you've found it, click on the request name, which represents the HTTP request that was sent to the server for the video file.

Identify the Request URL

The first thing in the first tab of the request viewer should be the Request URL in the Headers tab. You can just copy this URL into another video, and now if you right click the video, it should include a Save option, unlike when the whole thing was wrapped in Flash or whatever.

Enjoy!

@zafarnayab
Copy link

zafarnayab commented May 20, 2023

@danfinlay What if request are sent in segments, As in my case video request are sent in multiple segments.

Screenshot 2023-05-20 at 11 13 47 PM

@zaphod77
Copy link

zaphod77 commented Nov 13, 2023

99% of the time, if it's sent in segments, it's because there's an m3u8 file with a list of segments. the trick is to grab that file, which will tell you which segment is which. :) there are extensions to do that.

There is stuff this does NOT work on.

Specifically, there are cases where there IS no direct URL, and the only access to the video file is through a script that verifies both referrer and a one time token created when the player is opened. The player autoloads the url so by the time it's in network resources, the token is already used, and trying to copy the link doesn't work. even if you try to view source, by the time you see the token, it's too late, because the token is only valid to start the stream for a few seconds, even if it wasn't activated immediately.

How do you beat this one, and force the browser to download instead of play?

@nmaxcom
Copy link

nmaxcom commented Oct 22, 2024

@zaphod77 I'm a newbie in all of this, but probably you'd need something similar to what's used to rip Netflix videos and such. An entire app that talks to the server you want to get the media from as if it were Chrome. You give it your cookies and target and the code has to pretend to be streaming (as far as the server knows) but in fact is loading it to a local file.
Something like this: https://github.com/Divxeas/Netflix-videos-downloader1/blob/main/services/netflix.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment