我尝试使用Mechanize从(Google)网络服务中检索数据。
如果用户不拥有2FA(双因素身份验证),则此代码有效:
#!/usr/bin/perl
my $email = 'xxxxx';
my $pass = 'xxxxx';
use WWW::Mechanize;
my $time1 = (time - 24 * 60 * 60) * 1000;
my $time2 = (time + 24 * 60 * 60) * 1000;
my $mech = WWW::Mechanize->new();
$mech->get("https://maps.google.com/locationhistory/b/0/kml?startTime=$time1&endTime=$time2");
$mech->submit_form(fields => { 'Email' => $email, 'Passwd' => $pass, }, );
$mech->content =~ m!.*<gx:coord>(.*?)</gx:coord>!s;
my $coord = $1;
my($lng, $lat) = ($coord =~ /^([-+]?[\d\.]+)[ ,]+([-+]?[\d\.]+)/);
如果用户已打开2FA,则在提交密码后,该页面会要求输入2FA代码。我有一个生成代码的令牌 - 但我不确定如何提交它。
(我已尝试使用App Specific Passwords - 但他们不能为此类访问工作。)