我正在编写一个涉及编辑Firefox代理设置的程序,特别是socks和http代理设置。我想通过编辑Firefox的prefs.js文件来做到这一点。它在python中打开很好 - 但在那之后我就想不出一种方法来做到这一点并不是非常长和迂回。我要编辑的prefs.js部分如下所示:
user_pref("network.proxy.backup.ftp", "");
user_pref("network.proxy.backup.ftp_port", 0);
user_pref("network.proxy.backup.socks", "");
user_pref("network.proxy.backup.socks_port", 0);
user_pref("network.proxy.backup.ssl", "");
user_pref("network.proxy.backup.ssl_port", 0);
user_pref("network.proxy.ftp", "foo.bar");
user_pref("network.proxy.ftp_port", 5);
user_pref("network.proxy.gopher", "");
user_pref("network.proxy.gopher_port", 0);
user_pref("network.proxy.http", "foo.bar");
user_pref("network.proxy.http_port", 5);
user_pref("network.proxy.share_proxy_settings", true);
user_pref("network.proxy.socks", "foo.bar");
user_pref("network.proxy.socks_port", 5);
user_pref("network.proxy.ssl", "foo.bar");
user_pref("network.proxy.ssl_port", 5);
user_pref("network.proxy.type", 1);
答案 0 :(得分:1)
你真的不需要JavaScript解析器或任何花哨的东西;你可以用非常简单的正则表达式做到这一点。例如:
r = re.compile(r'user_pref\("network.proxy.socks", .*?\);')
with open('prefs.js') as f:
contents = f.read()
contents = r.sub(r'user_pref("network.proxy.socks", "the.value.i.want");',
contents)
with open('newprefs.js', 'w') as f:
f.write(contents)
如果你甚至不理解简单的正则表达式,那么用简单的字符串操作也不是很难。例如:
with open('prefs.js') as fin, open('newprefs.js', 'w') as fout:
for line in fin:
if 'user_pref("network.proxy.socks",' in line:
line = 'user_pref("network.proxy.socks", "the.value.i.want");\n'
fout.write(line)
要编辑更多行,只需多次执行相同的操作。