in reply to WWW::Mechanize::Chrome Instagram

I reported an issue about a problem with clicking a "javascript link" a while back to GitHub: https://github.com/Corion/WWW-Mechanize-Chrome/issues/21.

I was able to hack the module to get it to work but I don't think it was an ideal solution.

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

Replies are listed 'Best First'.
Re^2: WWW::Mechanize::Chrome Instagram
by damian1 (Novice) on Sep 03, 2019 at 21:00 UTC

    Can you show me Your "hacked" code?

      I don't remember but my code is in the comment there in the previous link. But the original code might have changed. I modified the _mightNavigate sub, line 1585: https://github.com/Corion/WWW-Mechanize-Chrome/blob/d94c8f43a8c72efc994695e7c075dbc849b2c1e4/lib/WWW/Mechanize/Chrome.pm

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
      $nysus = $PM . ' ' . $MCF;
      Click here if you love Perl Monks

        Currently there is no way for the ->click method to avoid waiting on a HTTP response (or to recognize a standard way of no HTTP response). I'm planning to add a parameter that lets you basically send the click event and then continue, so you can manually wait for the event you want. But currently this is not conveniently solvable without resorting to ->eval of Javascript.

        #!/usr/bin/perl # hash-bang / she-bang / sh-bang use strict; use warnings; use Log::Log4perl ':easy'; use WWW::Mechanize::Chrome; use open ':std', ':encoding(UTF-8)'; sub main () { my $mech; my $res; my $url; my $cookies; my $username; my $password; my $user; my $pass; my @formlist; $user = 'www'; $pass = 'zzzz'; $url = "https://www.instagram.com/accounts/login/?source=auth_swit +cher&hl=en"; $mech = WWW::Mechanize::Chrome->new( launch_exe => 'chromium', launch_arg => ["--no-sandbox", "--disable-setuid-sandbox", + "--remote-debugging-port=9222", "--headless"], ); $mech->allow( javascript => 1 ); $mech->get($url); if ($mech->success()) { $mech->sleep(1); + # waiting for load site $mech->form_number(1); $mech->value( username => $user ); $mech->value( password => $pass ); $mech->eval_in_page(<<'JS'); var cls = document.getElementsByClassName('_0mzm- sqdOP L3NKy + '); Array.prototype.forEach.call(cls, (item) => item.removeAttribu +te('disabled')); JS $mech->click({intrapage => 1, text => 'Log In', single => 1 }) +; $mech->sleep(2); print $mech->content; } else { print "Not connect to: ".$url."\r\n"; } return 0; } main ();

        Now i manually remove disable attribute from button, request send when i click Log in but get me error "The username you entered doesn't belong to an account. Please check your username and try again." when I'm definitely entering the correct data, it looks like he didn't see the login and password completed before sending, this error is probably displayed for an empty login. Anyone have any idea how to log in correctly?