我正在为一个网站制定 508 可访问标准。有一个 Firefox 插件可以帮助检查网站的每个页面 WAVE 插件
我有一个爬虫可以遍历网站的所有页面。
现在我想结合 WAVE 插件 + 我的爬虫来自动检查网站是否符合 508 可访问性合规性。
我的问题是如何从命令行运行具有特定 URL 的 Firefox 插件?
感谢您的帮助,
明
编辑2023,看得更远!
您可以从命令行执行许多复杂的操作,如运行内联javascript(我在答案底部的另一个bash方法下使用
firefox 'data:text/html..
发布了彩色RGB淋浴)。
也许这可以帮助你:
$ firefox 'data:text/html;charset=ISO-8859-1,
<html>
<head>
<title>TEST Demo</title>
</head>
<body>
<h3 id="title">Test demo</h3>
<script language="javascript">
window.open("http://perso.f-hauri.ch/~felix/svg/dustin_w_Clock_autonom.svg","clock","toolbar=0,location=0,status=0,menubar=0,scrollbars=1,resizable=1,width=400,height=400,top=36,left=700");
window.open("https://stackexchange.com/users/flair/1965184.png","netrate","toolbar=0,location=0,status=0,menubar=0,scrollbars=0,resizable=0,width=208,height=58,top=36,left=490");
var s=10;
function cntdwn()
{
document.getElementById("title").innerHTML="Test demo: "+s;s=s-1;
if (0 > s)
{
window.location="https://stackoverflow.com/a/13013464/1765658";
}
else window.setTimeout(cntdwn,1000);
};
window.onload=cntdwn;
</script>
</body>'
可以写成:
$ firefox 'data:text/html;charset=ISO-8859-1,<html><body><h3 id="title"></h3>'"$(
cat <<eof
<script language="javascript">
var s=10;
function cntdwn() {
document.getElementById("title").innerHTML="Test demo: "+s;s=s-1;
if (0 > s) {
window.location="https://stackoverflow.com/a/13013464/1765658";
}
else window.setTimeout(cntdwn,1000);
};
window.onload=cntdwn;
window.open("http://perso.f-hauri.ch/~felix/svg/dustin_w_Clock_autonom.svg","clock","toolbar=0,location=0,status=0,menubar=0,scrollbars=1,resizable=1,width=400,height=400,top=36,left=700");
window.open("https://stackexchange.com/users/flair/1965184.png","netrate","toolbar=0,location=0,status=0,menubar=0,scrollbars=0,resizable=0,width=208,height=58,top=36,left=490");
</script> </body>
eof
)"
甚至:
$ firefox 'data:text/html;charset=ISO-8859-1;base64,PGh0bWw+PGhlYWQ+PHRpdGxlPlRF
U1QgRGVtbzwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMyBpZD0idGl0bGUiPlRlc3QgZGVtbzwvaDM+PHNj
cmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+d2luZG93Lm9wZW4oImh0dHA6Ly9wZXJzby5mLWhhdXJp
LmNoL35mZWxpeC9zdmcvZHVzdGluX3dfQ2xvY2tfYXV0b25vbS5zdmciLCJjbG9jayIsInRvb2xiYXI9
MCxsb2NhdGlvbj0wLHN0YXR1cz0wLG1lbnViYXI9MCxzY3JvbGxiYXJzPTEscmVzaXphYmxlPTEsd2lk
dGg9NDAwLGhlaWdodD00MDAsdG9wPTM2LGxlZnQ9NzAwIik7d2luZG93Lm9wZW4oImh0dHBzOi8vc3Rh
Y2tleGNoYW5nZS5jb20vdXNlcnMvZmxhaXIvMTk2NTE4NC5wbmciLCJuZXRyYXRlIiwidG9vbGJhcj0w
LGxvY2F0aW9uPTAsc3RhdHVzPTAsbWVudWJhcj0wLHNjcm9sbGJhcnM9MCxyZXNpemFibGU9MCx3aWR0
aD0yMDgsaGVpZ2h0PTU4LHRvcD0zNixsZWZ0PTQ5MCIpO3ZhciBzPTEwO2Z1bmN0aW9uIGNudGR3bigp
e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aXRsZSIpLmlubmVySFRNTD0iVGVzdCBkZW1vOiAiK3M7
cz1zLTE7aWYgKDAgPiBzKXt3aW5kb3cubG9jYXRpb249Imh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20v
YS8xMzAxMzQ2NC8xNzY1NjU4Ijt9ZWxzZSB3aW5kb3cuc2V0VGltZW91dChjbnRkd24sMTAwMCk7fTt3
aW5kb3cub25sb2FkPWNudGR3bjs8L3NjcmlwdD48L2JvZHk+'
(注意将 Base64 按 4 个字符的倍数分割!)
这与
chromium
相同,我相信,几乎所有浏览器......
从57版本开始,firefox不再直接打开此类链接。
我必须在新的 Firefox 窗口中点击:
location
字段,data:...
链接。然后
preferences
按钮为此,我在
bash下使用
xdotool
(和 xwininfo
),以使其自动执行。
(当然,我可以转到
about:config
,然后将security.data_uri.block_toplevel_data_uri_navigations
设置为false
,但我认为这是一个坏主意!)
#!/bin/bash
title='Inline html demos ( bash + javascript )'
targetUrl='https://stackoverflow.com/a/13013464/1765658'
declare -A urls='(
[clock]="http://perso.f-hauri.ch/~felix/svg/dustin_w_Clock_autonom.svg"
[flair]="https://stackexchange.com/users/flair/1965184.png"
)'
declare -A sizes='( # " Left, Top, Width, Height, Resizeable (bool) "
[clock]=" 700, 36, 400, 400, 1 "
[flair]=" 490, 36, 208, 58, 0 "
)'
renderHtml() {
cat <<-eof
<html>
<body><h3>$title</h3><div id="title">[ . . . ]</div>
<script language="javascript">
var s=10;
function cntdwn() {
document.getElementById("title").innerHTML="Countdown: "+s;
s=s-1;
if (0 > s) {
window.location="$targetUrl"
}
else window.setTimeout(cntdwn,1000);
};
function popwin(url,name,x, y, w, h, r) {
var optns=["toolbar=0", "location=0", "status=0", "menubar=0",
"scrollbars=" + r, "resizable=" + r, "width=" + w, "height=" +
h, "top=" + y, "left=" + x].join(",");
window.open(url,name,optns);
};
window.onload=cntdwn;
eof
for topop in "${!urls[@]}"; do
printf 'popwin("%s","%s",%s);\n' "${urls[$topop]}" \
"$topop" "${sizes[$topop]}"
done
echo $'</script>\n</body>'
}
start=${EPOCHREALTIME/.}
firefox 'data:text/html;charset=ISO-8859-1,'"$(renderHtml)"
# Workaround 'security.data_uri.block_toplevel_data_uri_navigations=true'
if (( ( ${EPOCHREALTIME/.} - start ) < 500000 )); then
for ((i=10; i--; 1)); do
{ read -r _; read -r _{,,,} wintitl
} < <(xwininfo -id "$(xdotool getactivewindow)")
case ${wintitl//\"} in Firefox*) break ;; esac
read -rt .002 _
done
read -rt .3 _
xdotool key --delay 300 Ctrl+l Return
read -rt .4 _
xdotool key Alt+p p
fi
当然,在运行此脚本之前,firefox必须已经运行,以便能够在现有的firefox会话中打开一个新窗口,然后继续脚本执行。
附加组件无法“运行”(例如,从命令行运行 Adblock 意味着什么?)。
如果您使用的附加组件不支持命令行参数。您可以编写一个扩展来检查命令行并调用您想要“运行”的任何其他附加组件的适当函数。