2

I was trying to handle a browser dialog with Playwright for Python in Firefox (in this case, but I guess the browser does not matter), i.e. a dialog that was opened by Firefox to ask whether to open or save a file. The dialog pops up after I click a button. The link to the file is not exposed, so I cannot download it in another way.

I tried catching a dialog event:

with page.expect_event("dialog") as page_info:
    button = page.querySelector('button[id=\"download\"]')
    button.click()

which times out. I then thought I found the solution in this GitHub ticket. However, the following did not work either:

page.on("dialog", lambda dialog: dialog.accept())
page.click("button")

Do these kinds of dialog - in contrast to dialogs e.g. raised by JavaScript alert() - not trigger a dialog event? I think they may not, judging by the answers to this post: Is it possible to catch browser's File Open/Save dialog event using Javascript.

If so, how can I accept or dismiss such a dialog using python-playwright?

buddemat
  • 4,552
  • 14
  • 29
  • 49

2 Answers2

0

So, it seems that this is simply not directly possible with python-playwright, nor is it going to be. From this discussion, I gathered that the dialog...

"[...] is not a part of the web, it is a part of the browser, so we don't automate it."

There are workarounds, e.g. to trigger a download in a different way, but this would then not involve handling the browser dialog, as stated in the question.

buddemat
  • 4,552
  • 14
  • 29
  • 49
-2

Try this:

page.once("dialog", lambda dialog: dialog.accept())
Kaol
  • 431
  • 2
  • 7
  • 16