从python编辑.js文件

时间:2013-12-24 02:14:29

标签: javascript python firefox

我正在编写一个涉及编辑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);

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)

要编辑更多行,只需多次执行相同的操作。