If a file does not download, have you tried inspecting the HTTP::Response object you receive from the ->get() call?
my $response = $mech->get($url);
open my $output, '>:raw', '/tmp/output.jpg';
print { $output } $response->decoded_content;
Edit: You might need to touch the ->content of the browser first so everything has time to initialize first:
my $response = $mech->get($url);
my $c = $mech->content; # Dummy request to initialize everything
open my $output, '>:raw', '/tmp/output.jpg';
print { $output } $response->decoded_content;