Seleniumで取得保存したファイル名の特定


Ubuntu＋Python＋SeleniumでChromeを自動化し、Saveボタンをクリックしてファイルをローカルに保存するところまで出来ましたが、このファイル名が手動で制御出来ず、取得元のサイトが検索ワードに基づいて付けた適当な名前になります。  
この、たった今保存されたファイルのファイル名をPythonで取得する場合、どの方法が賢いでしょうか。  
ディレクトリを検索し、正規表現でファイル名に合致したリストを得て、最も新しいものがそれだ、というのを考えましたが、たぶんあるあるの事例だと思いますので、より良い方法がありましたらご教示くだされば幸いです。




> Ubuntu＋Python＋Selenium

ご質問の前提条件から外れてしまいますが、 Selenium ではなく [Puppeteer](https://pptr.dev/)
であれば、直接ダウンロードするパスとファイル名を指定する方法があります。  
→ [puppeteer でファイルをダウンロードするときに、任意のパスと名前で保存する | Aqua Ware
つぶやきブログ](https://aquasoftware.net/blog/?p=1583)

上記の記事は、 node.js + Puppeteer の例ですが、
[pyppeteer](https://github.com/pyppeteer/pyppeteer) を使うことで、以下のように Python
でも同様の結果が得られます。

[code]

    import os
    import asyncio
    
    # Fetch.enable に対応している Chromeimum リビジョンを指定
    os.environ['PYPPETEER_CHROMIUM_REVISION'] = '884014'
    import pyppeteer
    
    event_loop = asyncio.get_event_loop()
    
    async def main(file_name, headless=True, wait_time=5.0):
        b = await pyppeteer.launch({'headless': headless})
        p = await b.newPage()
        await p.goto('https://github.com/pyppeteer/pyppeteer')
        e = await p.querySelector('get-repo')
        await e.click()
    
        client = await p.target.createCDPSession()
        await client.send('Page.setDownloadBehavior', { 'behavior': 'allow', 'downloadPath': os.getcwd() })
        await client.send('Fetch.enable', { 'patterns': [ { 'urlPattern': '*', 'requestStage': 'Response' }] })
    
        async def onRequestPaused(requestEvent):
            responseHeaders = [v for v in requestEvent['responseHeaders'] if v['name'] != 'content-disposition']
            requestId = requestEvent['requestId']
            if requestEvent['responseStatusCode'] == 200:
                responseHeaders.append({ 'name': 'content-disposition', 'value': f'attachment; filename="{file_name}"'})
                response = await client.send('Fetch.getResponseBody', { 'requestId': requestId })
                await client.send('Fetch.fulfillRequest', { 'requestId': requestId, 'responseCode': 200, 'responseHeaders': responseHeaders, 'body': response['body'] })
            else:
                await client.send('Fetch.continueRequest', { 'requestId': requestId }); 
        client.on('Fetch.requestPaused', lambda e: asyncio.ensure_future(onRequestPaused(e), loop=event_loop))
    
        # Github の "Download ZIP" のボタンをクリック
        e = await p.querySelector('a[href$=".zip"]')
        await e.click()
        await asyncio.sleep(wait_time)
        await client.send('Fetch.disable')
        await b.close()
    
    event_loop.run_until_complete(main(file_name='specified_name.zip', headless=False))
    
[/code]

Windows および WSL 上の Ubuntu で動作確認済みです。

pyppeteer のオリジナルが node.js であることから、基本非同期な API となっているため、 Selenium の同期的な API
に慣れていると、扱いづらいとは思います。  
参考になれば。

