首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Perl和Gtk3 3::WebKit解析动态页面

用Perl和Gtk3 3::WebKit解析动态页面
EN

Stack Overflow用户
提问于 2021-03-24 04:22:44
回答 1查看 116关注 0票数 1

我正在使用Gtk3 3::WebKit解析一个用JavaScript将内容加载到自身的网站。在加载站点时,它会向DOM添加多个包含内容的div:

<div class="product-card">...</div>

如何使用Gtk3 3::WebKit获取此内容?如何获取嵌套标记的内容?是否有关于Gtk3 3::WebKit的普通文档,因为我已经看到的所有东西都是非常糟糕的文档。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 10:38:45

下面是一个使用Gtk3 3::WebKit2的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use feature qw(say);
use strict;
use warnings;
use Gtk3 -init;
use Gtk3::WebKit2;
use Gtk3::JavaScriptCore;

{
    my $url = 'https://metacpan.org/pod/Gtk3::WebKit2';
    my $window = Gtk3::Window->new('toplevel');
    $window->set_default_size(800, 600);
    $window->signal_connect(destroy => sub { Gtk3->main_quit() });
    my $ctx = Gtk3::WebKit2::WebContext::get_default();
    my $view = Gtk3::WebKit2::WebView->new_with_context($ctx);
    $view->signal_connect('load-changed', sub {
        my ($view, $load_event) = @_;
        if ($load_event eq 'finished') {
            run_javascript(
                $view,
                'document.getElementsByClassName("logged_out")[1].innerHTML;'
            );
        }
    });
    $view->load_uri($url);
    my $scrolls = Gtk3::ScrolledWindow->new();
    $scrolls->add($view);
    $window->add($scrolls);
    $window->show_all();
    Gtk3::main_iteration while Gtk3::events_pending;
    Gtk3->main;
}

sub run_javascript {
    my ($view, $javascript_string) = @_;

    my $done = 0;

    $view->run_javascript($javascript_string, undef, sub {
        my ($object, $result, $user_data) = @_;
        my $value = $view->run_javascript_finish($result)->get_js_value;
        say $value->to_string;
        $done = 1;
        return "ok";
    }, undef);

    Gtk3::main_iteration while Gtk3::events_pending and not $done;
}

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="" onclick="alert('Please sign in to add favorites'); return false" class="favorite highlight" title="Add to favorites">
<span>2</span> ++</a>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66780960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文