簡體   English   中英

如何通過WWW :: Mechanize :: Firefox調用jQuery或Angular函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM