ertaquo
@ertaquo

WWW::WebKit, Glib::Object::Introspection и все-все-все

Возникла нужна написать скрипт, который заходил бы на сайт и тыкал по паре кнопок. Посмотрел в сторону WWW::WebKit и показалось, что это есть хорошая штука. Поставил из CPAN'а, попробовал… Но увы! оно не заработало.
При запуске тестового скрипта из документации с подключенным Carp'ом на строчке $webkit->type("q", "hello world"); ругается так:
undef is not of type Gtk3::WebKit::DOMXPathResult at /usr/local/lib/perl/5.14.2/Glib/Object/Introspection.pm line 59.
 at ./test.pl line 4.
	main::__ANON__('undef is not of type Gtk3::WebKit::DOMXPathResult at /usr/loc...') called at /usr/local/lib/perl/5.14.2/Glib/Object/Introspection.pm line 59
	Glib::Object::Introspection::__ANON__('Gtk3::WebKit::DOMDocument=HASH(0x36cb648)', 'q', 'Gtk3::WebKit::DOMDocument=HASH(0x36cb648)', 'Gtk3::WebKit::DOMXPathNSResolver=HASH(0x370ce88)', 7, undef) called at /usr/local/lib/perl/5.14.2/WWW/WebKit.pm line 421
	WWW::WebKit::resolve_locator('WWW::WebKit=HASH(0x1e13b60)', 'q') called at /usr/local/lib/perl/5.14.2/WWW/WebKit.pm line 594
	WWW::WebKit::type('WWW::WebKit=HASH(0x1e13b60)', 'q', 'hello world') called at ./test.pl line 12

В WWW::WebKit эта ошибка возникает тут, на третьей строчке:
    elsif (my ($xpath) = $locator =~ /^(?: xpath=)?(.*)/xm) {
        my $resolver = $document->create_ns_resolver($context);
        my $xpath_results = $document->evaluate($xpath, $context, $resolver, ORDERED_NODE_SNAPSHOT_TYPE, undef);
        my $length = $xpath_results->get_snapshot_length;
        croak "$xpath gave $length results: " . join(', ', map $xpath_results->snapshot_item($_), 0 .. $length - 1) if $length != 1;
        return $xpath_results->snapshot_item(0);
    }

Посмотрел в интернете в сторону библиотеки Glib::Object::Introspection, и вроде как в последних версиях было сделано, чтобы переменные неизвестных типов при передаче заменялись на NULL. Вроде бы это то, что нужно? Скачал из репов исходники, попробовал собрать. Просто make && make install прошли нормально, но они установили немного не то… Ну а команда make perl заругалась вот так:
ertaquo@ertaquo-nb:~/perl-Glib-Object-Introspection$ make perl
Skip blib/arch/Glib/Object/Introspection/Install/Files.pm (unchanged)
Skip blib/lib/Glib/Object/Introspection.pm (unchanged)
Writing "Makefile.aperl" for this perl
Trying to build test libraries... not OK
Unrecognized argument in LIBS ignored: '-pthread'
Writing Makefile.aperl for Glib::Object::Introspection
Writing MYMETA.yml and MYMETA.json
make -f Makefile.aperl perl
make[1]: Вход в каталог `/home/ertaquo/perl-Glib-Object-Introspection'
Writing perlmain.c
cd . && cc -c   "-I/usr/lib/perl/5.14/CORE"  \
	-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g \
	  -DVERSION=\"0.015\" \
	-DXS_VERSION=\"0.015\" -o perlmain.o -fPIC "-I/usr/lib/perl/5.14/CORE" perlmain.c
[ CC GObjectIntrospection.c ]
rm -rf blib/arch/auto/Glib/Object/Introspection/Introspection.a
[ AR blib/arch/auto/Glib/Object/Introspection/Introspection.a ]
chmod 755 blib/arch/auto/Glib/Object/Introspection/Introspection.a
cat blib/arch/auto/Glib/Object/Introspection/extralibs.ld >> blib/arch/auto/Glib/Object/Introspection/extralibs.all
cc -fstack-protector -L/usr/local/lib -Wl,-E -o perl -O2 -g ./perlmain.o GObjectIntrospection.o blib/arch/auto/Glib/Object/Introspection/Introspection.a /usr/lib/perl/5.14/CORE/libperl.a `cat blib/arch/auto/Glib/Object/Introspection/extralibs.all` -ldl -lm -lpthread -lc -lcrypt 
GObjectIntrospection.o: In function `get_package_for_basename':
/home/ertaquo/perl-Glib-Object-Introspection/gperl-i11n-info.c:202: undefined reference to `gperl_sv_is_defined'
GObjectIntrospection.o: In function `create_perl_callback_closure':
/home/ertaquo/perl-Glib-Object-Introspection/gperl-i11n-callback.c:9: undefined reference to `gperl_sv_is_defined'

И далее на много строк с аналогичными ошибками.
Никто случайно не сталкивался с таким? Можно это как-нибудь починить или придется использовать что-нибудь другое?
Ах да, Ubuntu 12.10 x64.
  • Вопрос задан
  • 3130 просмотров
Пригласить эксперта
Ответы на вопрос 2
wise_gopher
@wise_gopher
Если просто тыкнуть по «паре кнопок» может это подойдет? Codeception->Acceptance
Ответ написан
@pcdesign
скрипт, который заходил бы на сайт и тыкал по паре кнопок.


А разве LWP::UserAgent для этого не достаточно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы