[英]How can I call jQuery or Angular functions via WWW::Mechanize::Firefox?
我正在嘗試通過WWW :: Mechanize :: Firefox的eval_in_page
執行jQuery / Angular調用。 我猜是存在某種范圍問題,因為我遇到了錯誤。
如果我嘗試執行此代碼:
angular.element(document.getElementsByClassName("input")[0]).triggerHandler(('change');
我收到了這個回復:
MozRepl :: RemoteObject:ReferenceError:angular未定義為...
如果我嘗試執行此代碼:
$(".input").val("Foo")
我收到了這個回復:
MozRepl :: RemoteObject:ReferenceError:$未定義...
看來我無法訪問任何一個框架。 但是,該頁面似乎都已加載。 如果我在瀏覽器控制台中執行代碼,它可以正常工作。
您可以使用$mech->click()
在字段內$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
}
感謝所有的想法。 我無法解決原來的問題,但我能夠提出這個替代解決方案。 使用這個javascript我能夠填寫該字段並觸發相應的更改和模糊事件。 這樣做允許角度進行它需要做的處理。
$js = qq(
var myElement = document.getElementsByClassName("input")[0];
myElement.value = "$value";
function fireEvent(element, event) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
fireEvent(myElement, 'change');
fireEvent(myElement, 'blur');
);
$mech->eval_in_page($js);
請注意,我使用的功能是在此處找到的精簡解決方案。 我把它修剪成Firefox代碼。 如果您使用的是其他瀏覽器,則需要使用更強大的代碼。 如果有人想出原始問題的解決方案,我會很樂意接受它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.