Repository: yt-dlp/yt-dlp

Issue:
[LastFM] Playlist pagination broken
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a broken site
- [X] I've verified that I'm running yt-dlp version **2023.01.02** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [ ] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

_No response_

### Provide a description that is worded well enough to be understood

yt-dlp only downloads the first page when downloading [playlists][1]. Manually adding `?page=2` to the [URL][2] allows yt-dlp to scrape the other pages as well.

I think the issue lies in the 'infinite' scroll functionality of the playlists. yt-dlp is probably looking for the pagination bar, which only appears when adding the `page` URL parameter with a value > 1.

Proposed solutions are to either use the infinite scroll mechanism to fetch the entire playlist or to detect URLs that point to the first page of a playlist and enqueuing the URL to the second page.

I may look into fixing this if I find the time this weekend.

[1]: https://www.last.fm/user/naamloos1/playlists/12543760
[2]: https://www.last.fm/user/naamloos1/playlists/12543760?page=2

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU', '-s', 'https://www.last.fm/user/naamloos1/playlists/12543760']
[debug] User config: []
[debug] System config: []
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2023.01.02 [d83b0ad] (pip)
[debug] Python 3.10.9 (CPython x86_64 64bit) - Linux-6.0.12-x86_64-with-glibc2.35 (OpenSSL 3.0.7 1 Nov 2022, glibc 2.35)
[debug] exe versions: ffmpeg 4.4.2 (setts), ffprobe 4.4.2, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1754 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2023.01.02, Current version: 2023.01.02
yt-dlp is up to date (2023.01.02)
[LastFMUser] Extracting URL: https://www.last.fm/user/naamloos1/playlists/12543760
[download] Downloading playlist: 12543760
[LastFMUser] 12543760: Downloading webpage
[LastFMUser] 12543760: Downloading page 1
[LastFMUser] Playlist 12543760: Downloading 27 items of 27
[download] Downloading item 1 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=KYfADOlstwc
[youtube] KYfADOlstwc: Downloading webpage
[youtube] KYfADOlstwc: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] KYfADOlstwc: Downloading 1 format(s): 247+251
[download] Downloading item 2 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=bMd5e7qfoVY
[youtube] bMd5e7qfoVY: Downloading webpage
[youtube] bMd5e7qfoVY: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] bMd5e7qfoVY: Downloading 1 format(s): 248+251
[download] Downloading item 3 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=XeILs5RjAeQ
[youtube] XeILs5RjAeQ: Downloading webpage
[youtube] XeILs5RjAeQ: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] XeILs5RjAeQ: Downloading 1 format(s): 247+251
[download] Downloading item 4 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=s5-nLWLL3o0
[youtube] s5-nLWLL3o0: Downloading webpage
[youtube] s5-nLWLL3o0: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] s5-nLWLL3o0: Downloading 1 format(s): 248+251
[download] Downloading item 5 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=enWuAAbfcGM
[youtube] enWuAAbfcGM: Downloading webpage
[youtube] enWuAAbfcGM: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] enWuAAbfcGM: Downloading 1 format(s): 248+251
[download] Downloading item 6 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=bJLhWNbxaAc
[youtube] bJLhWNbxaAc: Downloading webpage
[youtube] bJLhWNbxaAc: Downloading android player API JSON
[youtube] bJLhWNbxaAc: Downloading MPD manifest
[youtube] bJLhWNbxaAc: Downloading MPD manifest
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] bJLhWNbxaAc: Downloading 1 format(s): 248+251
[download] Downloading item 7 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=_G1soKzXJUo
[youtube] _G1soKzXJUo: Downloading webpage
[youtube] _G1soKzXJUo: Downloading android player API JSON
[debug] [youtube] Extracting signature function js_e5f6cbd5_106
[debug] Loading youtube-sigfuncs.js_e5f6cbd5_106 from cache
[debug] Loading youtube-nsig.e5f6cbd5 from cache
[debug] [youtube] Decrypted nsig I0Z7Sf6I0gahg02PP => C656VkHwU8eXrw
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] _G1soKzXJUo: Downloading 1 format(s): 303+251
[download] Downloading item 8 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=2olZcB4CgE0
[youtube] 2olZcB4CgE0: Downloading webpage
[youtube] 2olZcB4CgE0: Downloading android player API JSON
ERROR: [youtube] 2olZcB4CgE0: Video unavailable. This video is not available
  File "/nix/store/sxnwjrpr7zfmp8nvx23r170l3zk9fmpc-python3.10-yt-dlp-2023.1.2/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 680, in extract
    ie_result = self._real_extract(url)
  File "/nix/store/sxnwjrpr7zfmp8nvx23r170l3zk9fmpc-python3.10-yt-dlp-2023.1.2/lib/python3.10/site-packages/yt_dlp/extractor/youtube.py", line 3959, in _real_extract
    self.raise_no_formats(reason, expected=True)
  File "/nix/store/sxnwjrpr7zfmp8nvx23r170l3zk9fmpc-python3.10-yt-dlp-2023.1.2/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 1158, in raise_no_formats
    raise ExtractorError(msg, expected=expected, video_id=video_id)

[download] Downloading item 9 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=3PfFcsO-sr0
[youtube] 3PfFcsO-sr0: Downloading webpage
[youtube] 3PfFcsO-sr0: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 3PfFcsO-sr0: Downloading 1 format(s): 248+251
[download] Downloading item 10 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=JJJVoiGXzm0
[youtube] JJJVoiGXzm0: Downloading webpage
[youtube] JJJVoiGXzm0: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] JJJVoiGXzm0: Downloading 1 format(s): 313+251
[download] Downloading item 11 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=yu9XxF3zDnY
[youtube] yu9XxF3zDnY: Downloading webpage
[youtube] yu9XxF3zDnY: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] yu9XxF3zDnY: Downloading 1 format(s): 248+251
[download] Downloading item 12 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=uS2tlYnEVeE
[youtube] uS2tlYnEVeE: Downloading webpage
[youtube] uS2tlYnEVeE: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] uS2tlYnEVeE: Downloading 1 format(s): 248+251
[download] Downloading item 13 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=m0_kIkodrds
[youtube] m0_kIkodrds: Downloading webpage
[youtube] m0_kIkodrds: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] m0_kIkodrds: Downloading 1 format(s): 248+251
[download] Downloading item 14 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=hyGGB_4tTvM
[youtube] hyGGB_4tTvM: Downloading webpage
[youtube] hyGGB_4tTvM: Downloading android player API JSON
[debug] Loading youtube-nsig.e5f6cbd5 from cache
[debug] [youtube] Decrypted nsig XKi0FB67PxaEB7vXY => V23eOlqjfyegIQ
[debug] [youtube] Extracting signature function js_e5f6cbd5_102
[debug] Loading youtube-sigfuncs.js_e5f6cbd5_102 from cache
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] hyGGB_4tTvM: Downloading 1 format(s): 303+251
[download] Downloading item 15 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=WyrjeRtSi-o
[youtube] WyrjeRtSi-o: Downloading webpage
[youtube] WyrjeRtSi-o: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] WyrjeRtSi-o: Downloading 1 format(s): 248+251
[download] Downloading item 16 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=1s_lpkO1T1k
[youtube] 1s_lpkO1T1k: Downloading webpage
[youtube] 1s_lpkO1T1k: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 1s_lpkO1T1k: Downloading 1 format(s): 248+251
[download] Downloading item 17 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=BGUIkmUgJsE
[youtube] BGUIkmUgJsE: Downloading webpage
[youtube] BGUIkmUgJsE: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] BGUIkmUgJsE: Downloading 1 format(s): 248+251
[download] Downloading item 18 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=0YwuEoRI6fs
[youtube] 0YwuEoRI6fs: Downloading webpage
[youtube] 0YwuEoRI6fs: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 0YwuEoRI6fs: Downloading 1 format(s): 244+251
[download] Downloading item 19 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=EBL6JDtoTQA
[youtube] EBL6JDtoTQA: Downloading webpage
[youtube] EBL6JDtoTQA: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] EBL6JDtoTQA: Downloading 1 format(s): 248+251
[download] Downloading item 20 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=speFGKGI9xw
[youtube] speFGKGI9xw: Downloading webpage
[youtube] speFGKGI9xw: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] speFGKGI9xw: Downloading 1 format(s): 248+251
[download] Downloading item 21 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=Nwzy4ZqcY8Y
[youtube] Nwzy4ZqcY8Y: Downloading webpage
[youtube] Nwzy4ZqcY8Y: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] Nwzy4ZqcY8Y: Downloading 1 format(s): 248+251
[download] Downloading item 22 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=-3P2USPFDcE
[youtube] -3P2USPFDcE: Downloading webpage
[youtube] -3P2USPFDcE: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] -3P2USPFDcE: Downloading 1 format(s): 248+251
[download] Downloading item 23 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=qT-ug3Gldmw
[youtube] qT-ug3Gldmw: Downloading webpage
[youtube] qT-ug3Gldmw: Downloading android player API JSON
[youtube] qT-ug3Gldmw: Downloading MPD manifest
[youtube] qT-ug3Gldmw: Downloading MPD manifest
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] qT-ug3Gldmw: Downloading 1 format(s): 302+251
[download] Downloading item 24 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=sRxkKikwsKI
[youtube] sRxkKikwsKI: Downloading webpage
[youtube] sRxkKikwsKI: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] sRxkKikwsKI: Downloading 1 format(s): 248+251
[download] Downloading item 25 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=9K-y37DfrIA
[youtube] 9K-y37DfrIA: Downloading webpage
[youtube] 9K-y37DfrIA: Downloading android player API JSON
[debug] Loading youtube-nsig.e5f6cbd5 from cache
[debug] [youtube] Decrypted nsig 5s-mPeJj8bm7uJPWP => 6_gdY5ntKsq9mg
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 9K-y37DfrIA: Downloading 1 format(s): 303+251
[download] Downloading item 26 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=pAAqrqg7NiU
[youtube] pAAqrqg7NiU: Downloading webpage
[youtube] pAAqrqg7NiU: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] pAAqrqg7NiU: Downloading 1 format(s): 248+251
[download] Downloading item 27 of 27
[youtube] Extracting URL: https://www.youtube.com/watch?v=jGzHFJZKyws
[youtube] jGzHFJZKyws: Downloading webpage
[youtube] jGzHFJZKyws: Downloading android player API JSON
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, filesize, fs_approx, tbr, vbr, abr, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] jGzHFJZKyws: Downloading 1 format(s): 248+251
[download] Finished downloading playlist: 12543760
```



Discussion:
The playlist extractor currently tries to determine the number of pages by searching the webpage html for a `<li>` tag with a class of `pagination-next`, which no longer exists, so then the extractor assumes it's only a 1 page playlist.

The playlists lazy load in a browser with javascript enabled, which is done with ajax calls for the next page of html. Page source still contains the paginated links, we just aren't able to know the total number of pages in advance anymore:
```html
            <p class="show-more">
                <a
                    href="/user/naamloos1/playlists/12543760?page=2"
                    data-show-more-link
                    data-show-more-loading-copy="Loading more"
                >Show more</a>
            </p>
```

Resolving patch:
diff --git a/yt_dlp/extractor/lastfm.py b/yt_dlp/extractor/lastfm.py
--- a/yt_dlp/extractor/lastfm.py
+++ b/yt_dlp/extractor/lastfm.py
@@ -1,33 +1,24 @@
+import itertools
 import re
 
 from .common import InfoExtractor
-from ..utils import int_or_none, format_field
+from ..utils import int_or_none, parse_qs, traverse_obj
 
 
 class LastFMPlaylistBaseIE(InfoExtractor):
     def _entries(self, url, playlist_id):
-        webpage = self._download_webpage(url, playlist_id)
-        start_page_number = int_or_none(self._search_regex(
-            r'\bpage=(\d+)', url, 'page', default=None)) or 1
-        last_page_number = int_or_none(self._search_regex(
-            r'>(\d+)</a>[^<]*</li>[^<]*<li[^>]+class="pagination-next', webpage, 'last_page', default=None))
-
-        for page_number in range(start_page_number, (last_page_number or start_page_number) + 1):
+        single_page = traverse_obj(parse_qs(url), ('page', -1, {int_or_none}))
+        for page in itertools.count(single_page or 1):
             webpage = self._download_webpage(
-                url, playlist_id,
-                note='Downloading page %d%s' % (page_number, format_field(last_page_number, None, ' of %d')),
-                query={'page': page_number})
-            page_entries = [
-                self.url_result(player_url, 'Youtube')
-                for player_url in set(re.findall(r'data-youtube-url="([^"]+)"', webpage))
-            ]
-
-            for e in page_entries:
-                yield e
+                url, playlist_id, f'Downloading page {page}', query={'page': page})
+            videos = re.findall(r'data-youtube-url="([^"]+)"', webpage)
+            yield from videos
+            if single_page or not videos:
+                return
 
     def _real_extract(self, url):
         playlist_id = self._match_id(url)
-        return self.playlist_result(self._entries(url, playlist_id), playlist_id)
+        return self.playlist_from_matches(self._entries(url, playlist_id), playlist_id, ie='Youtube')
 
 
 class LastFMPlaylistIE(LastFMPlaylistBaseIE):
@@ -37,7 +28,7 @@ class LastFMPlaylistIE(LastFMPlaylistBaseIE):
         'info_dict': {
             'id': 'Oasis',
         },
-        'playlist_count': 11,
+        'playlist_mincount': 11,
     }, {
         'url': 'https://www.last.fm/music/Oasis',
         'only_matching': True,
@@ -73,6 +64,18 @@ class LastFMUserIE(LastFMPlaylistBaseIE):
             'id': '12319471',
         },
         'playlist_count': 30,
+    }, {
+        'url': 'https://www.last.fm/user/naamloos1/playlists/12543760',
+        'info_dict': {
+            'id': '12543760',
+        },
+        'playlist_mincount': 80,
+    }, {
+        'url': 'https://www.last.fm/user/naamloos1/playlists/12543760?page=3',
+        'info_dict': {
+            'id': '12543760',
+        },
+        'playlist_count': 32,
     }]
 
 


Test patch: