使用JavaScript bookmarklet从图像链接中提取alt文本
我找到了一种通过找到的Perl脚本从图像链接中提取alt文本的方法。然而,该方法需要下载目标HTML;通过Perl脚本处理它,然后生成一个包含我需要的特定alt文本的文本文件;然后删除一些我无法通过代码手动过滤掉的额外文本位,因为我不知道如何使正则表达式与Perl一起工作(我尝试安装PCRE但没有效果) 这种方法仍然不切实际,而且我确信我可以通过JavaScript bookmarklet更快、更快地提取alt文本,并立即将输出整齐地列在新选项卡中。但是,我不知道如何将Perl脚本转换为JavaScript,也不知道如何从头开始编写 下面是Perl脚本:使用JavaScript bookmarklet从图像链接中提取alt文本,javascript,html,regex,perl,alt,Javascript,Html,Regex,Perl,Alt,我找到了一种通过找到的Perl脚本从图像链接中提取alt文本的方法。然而,该方法需要下载目标HTML;通过Perl脚本处理它,然后生成一个包含我需要的特定alt文本的文本文件;然后删除一些我无法通过代码手动过滤掉的额外文本位,因为我不知道如何使正则表达式与Perl一起工作(我尝试安装PCRE但没有效果) 这种方法仍然不切实际,而且我确信我可以通过JavaScript bookmarklet更快、更快地提取alt文本,并立即将输出整齐地列在新选项卡中。但是,我不知道如何将Perl脚本转换为Java
{
# Get data from HTML file
my $From = cwd() . '/' . $ARGV[0];
open( HTMLFILE, '<' . $From ) or die( "Cannot open $From to read." );
my $Html;
read HTMLFILE, $Html, -s $From;
close HTMLFILE;
# Find IMG elements
print "Images found!";
my %AltTexts;
while ( $Html =~ /(<IMG\b.*?>)/isg ) {
my $ImgElement = $1;
# Find SRC tag
$ImgElement =~ /SRC\s*=\s*([\"\'])(.*?)\1/is;
my $Src = $2;
# Find ALT tag & store text
if ( $ImgElement =~ /ALT\s*=\s*([\"\'])(.*?)\1/is ) {
$AltTexts{$Src} = $2;
}
else { # No ALT found so give it default text if none already found
unless ( exists( $AltTexts{$Src} ) ) {
$AltTexts{$Src} = 'NO_ALT_TEXT';
}
}
}
# Write extracted data to a file
my $To = cwd() . '/' . $ARGV[0] . '.txt';
open( ALTTEXTFILE, '>' . $To ) or die( "Cannot open $To to write." );
foreach my $SrcPath ( sort keys %AltTexts ) {
print ALTTEXTFILE "$AltTexts{$SrcPath}\n";
}
close ALTTEXTFILE;
}
{
#从HTML文件获取数据
我的$From=cwd()./。$ARGV[0];
打开(HTMLFILE,如下所示:
javascript:(function() {
var imgs = document.images,alts=[];
for (var i=0;i<imgs.length;i++) {
alts.push(imgs[i].getAttribute("alt") || "no alt");
}
alert(alts.join("\n"));
})()
javascript:(函数(){
var imgs=document.images,alts=[];
对于(var i=0;这很好。有没有办法让输出显示在单独的浏览器选项卡而不是对话框中?请参阅更新-未测试,因为这里的沙箱不允许它这太棒了!谢谢您,先生。不客气。只是想让您知道,您的问题实际上与主题无关,如中所示,但我喜欢bookmarklets:)与perl一样,我无法避免在结果中显示重复的alt文本(例如,joey页面中的“s”页面)。有没有办法从输出中删除整个重复的短语?