在数字写作时代,Grammarly Premium凭借其高级语法检查、风格优化和抄袭检测功能,成为众多写作者、学生和专业人士的必备工具。然而,高昂的订阅费用让许多用户望而却步。虽然网络上偶尔会出现共享的Premium Cookie,但手动查找和验证这些Cookie不仅耗时耗力,而且成功率极低——你可能需要尝试数十个Cookie才能找到一个有效的。
这就是为什么我们需要一种更智能的解决方案。本文将带你一步步构建一个全自动化的Python工具,它能够:
在开始编写代码前,我们需要准备合适的开发环境和必要的Python库。以下是推荐的工具栈:
安装这些依赖只需一条命令:
bash复制pip install requests beautifulsoup4 pyperclip tqdm json5
对于开发环境,我强烈推荐使用VS Code配合Python插件,或者PyCharm这类专业的Python IDE。它们能提供代码补全、调试和虚拟环境管理等强大功能。
提示:建议在虚拟环境中安装这些包,避免污染全局Python环境。可以使用
python -m venv venv创建虚拟环境。
要理解我们的脚本如何工作,首先需要了解Cookie在Grammarly认证中的角色。Grammarly使用Cookie来维持用户的登录状态,Premium Cookie中包含了标识用户订阅状态的关键信息。
当你在浏览器中导入一个有效的Premium Cookie并访问Grammarly时,服务器会检查:
我们的脚本将模拟这一验证过程,但完全自动化。具体来说,它会:
Cookie来源的可靠性直接影响脚本的可用性。我们将设计一个可扩展的采集系统,支持从多个网站获取Cookie。以下是核心代码结构:
python复制def cookie_convert_j2s(cookie_json):
"""将JSON格式的Cookie转换为字符串格式"""
return '; '.join(f"{item['name']}={item['value']}" for item in cookie_json)
def collect_from_linkstricks(page_count=5):
"""从linkstricks网站采集Cookie"""
base_url = "https://www.linkstricks.com/grammarly-cookies-{}/"
cookies = []
for page in range(1, page_count + 1):
try:
response = requests.get(base_url.format(page), timeout=10)
soup = BeautifulSoup(response.text, 'lxml')
code_block = soup.find('code', class_='language-json')
if code_block:
cookies.append(code_block.text)
except Exception as e:
print(f"采集第{page}页时出错: {str(e)}")
return cookies
这个设计有几个关键优势:
注意:实际使用时,应遵守目标网站的robots.txt规则,并合理设置请求间隔,避免给对方服务器造成过大压力。
验证是整个过程的核心环节。我们需要精心设计验证逻辑,确保准确判断Cookie的有效性。以下是验证函数的实现:
python复制def validate_cookie(cookie_str):
"""验证Grammarly Cookie是否有效"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Cookie': cookie_str
}
try:
response = requests.get(
'https://app.grammarly.com/',
headers=headers,
allow_redirects=False,
timeout=15
)
# 有效Cookie会直接返回200状态码
# 无效Cookie会被重定向到登录页面(302)
return response.status_code == 200
except requests.RequestException:
return False
为提高验证效率,我们可以添加一些优化:
将各个模块组合起来,我们创建完整的自动化流程:
python复制def main():
print("=== Grammarly Premium Cookie验证工具 ===")
# 步骤1:从多个来源采集Cookie
print("\n[1/3] 正在从各网站采集Cookie...")
all_cookies = []
all_cookies.extend(collect_from_linkstricks())
# 可以添加更多采集源...
if not all_cookies:
print("未采集到任何Cookie,请检查网络或来源网站")
return
print(f"共采集到{len(all_cookies)}个Cookie")
# 步骤2:验证Cookie有效性
print("\n[2/3] 正在验证Cookie有效性...")
valid_cookies = []
for cookie in tqdm(all_cookies, desc="验证进度"):
if validate_cookie(cookie_convert_j2s(json5.loads(cookie))):
valid_cookies.append(cookie)
# 步骤3:处理验证结果
print("\n[3/3] 结果处理...")
if valid_cookies:
print(f"找到{len(valid_cookies)}个有效Cookie!")
try:
pyperclip.copy(valid_cookies[0])
print("第一个有效Cookie已复制到剪贴板")
except Exception as e:
print(f"剪贴板操作失败: {str(e)}")
print("请手动复制以下Cookie:")
print(valid_cookies[0])
else:
print("未找到任何有效Cookie,请稍后再试")
if __name__ == "__main__":
main()
这个工作流提供了清晰的执行进度反馈,并在最后将有效的Cookie直接复制到剪贴板,极大提升了使用效率。
为确保脚本在各种环境下都能稳定运行,我们需要添加全面的错误处理:
改进后的采集函数示例:
python复制def safe_collect(url, max_retries=3):
"""带重试机制的采集函数"""
for attempt in range(max_retries):
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
return response.text
except Exception as e:
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt) # 指数退避
基础功能实现后,可以考虑添加以下高级特性:
例如,实现一个简单的Cookie池管理器:
python复制class CookiePool:
def __init__(self):
self.valid_cookies = []
self.blacklist = set()
def add_cookie(self, cookie):
if cookie not in self.blacklist:
self.valid_cookies.append(cookie)
def get_cookie(self):
if not self.valid_cookies:
return None
return random.choice(self.valid_cookies)
def report_invalid(self, cookie):
self.blacklist.add(cookie)
if cookie in self.valid_cookies:
self.valid_cookies.remove(cookie)
在实际使用中,我发现最有效的策略是组合多个Cookie来源,并设置每天自动运行两次的定时任务。这样能确保始终有可用的Cookie,而不用每次使用时临时查找。