You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dart从Flutter的WebView中通过类名获取图片的src地址

实现方案

你已经开启了JavascriptMode.unrestricted权限,满足执行JS查询DOM的前提,只需要补充页面加载完成回调、执行对应JS查询脚本即可,完整实现代码如下:

child: WebView(
  initialUrl: shop.link,
  javascriptMode: JavascriptMode.unrestricted,
  gestureRecognizers: gestureRecognizers,
  onWebViewCreated: (WebViewController webViewController) {
    _controller.complete(webViewController);
  },
  // 新增页面加载完成回调,确保DOM已渲染
  onPageFinished: (String url) async {
    final webViewController = await _controller.future;
    // 替换target-image-class为你需要匹配的实际类名
    const getImgSrcScript = '''
      (function() {
        const targetImgs = document.getElementsByClassName('target-image-class');
        // 取第一个匹配的图片src,需获取全部的话自行改返回数组即可
        return targetImgs.length > 0 ? targetImgs[0].src : '';
      })();
    ''';
    // 执行JS并获取返回结果
    final imgSrc = await webViewController.runJavascriptReturningResult(getImgSrcScript);
    // 处理返回结果(部分版本返回值会自带引号,可按需去除)
    final cleanedSrc = imgSrc.replaceAll('"', '');
    // 此处编写你的业务逻辑使用cleanedSrc
    print('匹配到的图片src:$cleanedSrc');
  },
),

补充说明

  • 若需要获取所有匹配类名的图片src,修改JS脚本返回数组即可:
    (function() {
      const targetImgs = document.getElementsByClassName('target-image-class');
      return Array.from(targetImgs).map(item => item.src);
    })();
    
  • 若目标元素是页面懒加载生成的,可以给JS执行加延迟,例如:
    // 延迟1秒执行,等懒加载内容渲染完成
    Future.delayed(const Duration(seconds: 1), () async {
      final imgSrc = await webViewController.runJavascriptReturningResult(getImgSrcScript);
    });
    

内容的提问来源于stack exchange,提问作者Cihan Kalmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:39:02