我正在尝试通过 WWW::Mechanize::Firefox 的 eval_in_page
执行 jQuery/Angular 调用。我猜测存在某种范围问题,因为我遇到了错误。
如果我尝试执行此代码:
angular.element(document.getElementsByClassName("input")[0]).triggerHandler(('change');
我收到这样的回复:
MozRepl::RemoteObject: ReferenceError: angular is not defined at ...
如果我尝试执行此代码:
$(".input").val("Foo")
我收到这样的回复:
MozRepl::RemoteObject: ReferenceError: $ is not defined ...
我似乎无法访问这两个框架。然而,该页面似乎已加载两者。如果我在浏览器控制台中执行代码,它就可以正常工作。
最佳答案
您可以使用 $mech->click()
在字段内单击,它接受 x, y
坐标,插入文本并再次移除焦点。我之前使用 PhantomJS 做过类似的工作。它也应该适用于 WWW::Mechanize::Firefox
。
use WWW::Mechanize::PhantomJS;
use strict;
use warnings;
my $mech = WWW::Mechanize::PhantomJS->new(log => 1);
$mech->get('http://example.com');
if($mech->success) {
# accepts x, y coordinates
$mech->click(.. field[2]);
# set a text for example in input-field number 2
$mech->eval('document.getElementsByTagName("input")[2].value = "Your value";');
# Click somewhere else to trigger blur event
$mech->click(.. outside the field[2]);
# Read the converted textual input from span
}
关于jquery - 如何通过 WWW::Mechanize::Firefox 调用 jQuery 或 Angular 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41369756/