【问题标题】:wrong srcset attributes from httrack来自 httrack 的错误 srcset 属性
【发布时间】:2018-03-01 11:25:48
【问题描述】:

我用 httracks 搜索了一个网站,并生成了许多不同级别的文件。但是该网站使用带有srcset 属性的picture / source 标签,httrack 无法处理,所有这些图片在离线时都无法正常工作。

如果使用选项Attempt to detect all links (even in unknown tags/javascript code)(在 winhttrack 中)并将所有图像复制到本地存储,

httrack 可以看到链接。但它并没有改变相对路径。

现在我需要一个脚本 (powershell/gnu bash),它可以编辑所有 html 文件,以使 srcsets 中的路径适应正确的相对路径。

我的想法是对每个文件夹进行递归,并附加一个 ../ 作为参数以插入/替换为 sed

做什么:

示例文件:

index.html
cat1/product1.html
cat2/option3/product5.html

每个都包含一些图片标签,例如:

<picture>
     <source srcset="/images/img1_low.jpg, /images/img1_low_ret.jpg x2" media="(max-width: 470px)">
     <source srcset="/images/img1_med.jpg, /images/img1_med_ret.jpg x2" media="(max-width: 960px)">
     <source srcset="/images/img1_hi.jpg, /images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
     <img src="../images/img1_hi.jpg" />
</picture>

在图像标签内,路径始终是正确的,从 httrack 完成:(images/img1_hi.jpg../images/img1_hi.jpg../../images/img1_hi.jpg

但源标签也必须包含匹配的路径:

在 index.html 中:

<picture>
     <source srcset="images/img1_low.jpg, images/img1_low_ret.jpg x2" media="(max-width: 470px)">
     <source srcset="images/img1_med.jpg, images/img1_med_ret.jpg x2" media="(max-width: 960px)">
     <source srcset="images/img1_hi.jpg, images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
     <img src="images/img1_hi.jpg" />
</picture>

在 cat1/product1.html 中:

<picture>
     <source srcset="../images/img1_low.jpg, ../images/img1_low_ret.jpg x2" media="(max-width: 470px)">
     <source srcset="../images/img1_med.jpg, ../images/img1_med_ret.jpg x2" media="(max-width: 960px)">
     <source srcset="../images/img1_hi.jpg, ../images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
     <img src="../images/img1_hi.jpg" />
</picture>

在 cat2/option3/product5.html:

<picture>
     <source srcset="../../images/img1_low.jpg, ../../images/img1_low_ret.jpg x2" media="(max-width: 470px)">
     <source srcset="../../images/img1_med.jpg, ../../images/img1_med_ret.jpg x2" media="(max-width: 960px)">
     <source srcset="../images/img1_hi.jpg, ../../images/img1_hi_ret.jpg x2" media="(min-width: 961px)">
     <img src="../../images/img1_hi.jpg" />
</picture>

我的尝试:

#!/usr/bin/bash

function workfolder {
    # $1 = current folder
    # $2 = prefix upfolders

    pushd $PWD
    cd $1

    for i in $( ls ) ; do
        if [ -d $i ] ; then
            workfolder $i ../$2
        fi
    done

    for i in $( ls *.html ) ; do
        sed -i 's/srcset="images/srcset="$2images/g' $i
        sed -i 's/, images/, $2images/g' $i
    done

    popd

}

workfolder .

除了太多错误之外,sed 替换中的$2 没有解决,而是被替换掉了。

【问题讨论】:

    标签: bash sed httrack


    【解决方案1】:
    #!/usr/bin/bash
    function workfolder {
        # $1 = current folder
        # $2 = prefix upfolders
    
        pushd $PWD > /dev/null
        cd $1
        echo "=====^ $PWD ====="
        for i in $( ls ) ; do
            if [ -d $i ] ; then
                workfolder $i ..\\/$2
            fi
        done
        for i in $( ls *.html ) ; do
            echo " working on: $PWD/$i with $2"
            sed -i 's/srcset="image/srcset="'$2'image/g' $i
            sed -i 's/\,\ image/\,\ '$2'image/g' $i
        done
        popd > /dev/null
        echo "=====v $PWD ====="
    }
    
    workfolder .
    

    陷阱是:在 sed 命令中完全使用 $2(第一次尝试未扩展)以及将 ../ 正确转义为可在 sed 命令中使用的形式的第二个参数

    【讨论】:

    • 不错!或者...如果您只想完全删除 srcset 属性:sed --in-place 's/srcset="[^"]*"//g' $i
    【解决方案2】:

    安装插件Code Snippets。使用以下代码添加一个新的 sn-p:

    add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
    

    按下“保存更改并激活”按钮。这个 sn-p 将从您的站点中删除 srcset 标记。 Code Source

    【讨论】:

    • 这是一个 WordPress 插件。这只有在您下载自己的 WordPress 网站时才会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多