JD青龙库优化
目标:最大化减少青龙JD库的操作。
现在的操作太麻烦了,要先去浏览器开发模式打开找到cookie,然后还得去后台更新,再手动执行JD相关的任务。
问题1:如何获得JD的cookie以及JD获取cookie的网址时效长短?
根据 青龙脚本之如何获取JD COOKIE中介绍,推荐使用:m.jd.com这个网址,使用手机验证码来登录,时效会比较长,为30天左右。
获得的cookie,只需要pt_pin:用户标识(明文,如 jd_xxx)和pt_key:身份认证令牌这两个字段。
环境变量格式:
pt_key=字符串;pt_pin=字符串;
注意必须有分号连结
然后根据GitHub上的分享,大家有一些只有2-3天,大概率是被风控了。我估计就是这种情况,但是我可以通过每天登录来弥补。我在chrome商店内,包括询问deepseek,千问,大致可以确定:用m.jd.com这个网址通过短信验证来获得比较长的有效期
痛点:获取cookie的过程太长,需要打开F12,而且还是一大串,麻烦。
解决方案 :
- 通过selenium模拟登录过程,手动输入验证码,获取到对应的cookie,然后再去青龙那边更新环境变量,再去手动执行所有京东任务。【根据以往经验,如果不马上执行,cookie很快就会失效】
- 如果是chrome浏览器,安装一键复制京东Cookie这个插件,然后电脑端登录获取cookie。
解决方案1路径
通过python启动的浏览器会被JD拒绝,错误代码error 5?
分析:触发了JD的反爬机制。
解决:这边使用B站上推荐的几个方案:
- 使用浏览器的debug模式,让selenium进行后续操作:
新建一个浏览器图标,并且在快捷方式内配置 --remote-debugging-port=端口号 --user-data-die=“浏览器安装路径”。然后手工打开浏览器,并且操作到一定程度后停下。selenium内使用opt.debugger_address='127.0.0.1:端口号’进行连接即可。
- 使用undetected_chromedriver库【这个库更新慢,和最新版本的chrome有一定的差距,大概率会被分析出来】
- 使用stealth.min.js文件,这个好多人说有效,但是测试下来,确实访问http://bot.sannysoft.com可以通过,但是我测试下来访问JD时候还是不行,有兴趣的可以下载下来按照视频里面测试下。
由于我使用的selenium是docker部署的,所以现在摆在我面前两个方案:
-
打开docker里面的chrome的debug模式,一直开着,然后通过界面登录后,获取对应的cookie。
这个需要每次启动时候附上–remote-debugging-port,可以考虑在桌面上新建一个快捷方式,然后每次通过vnc进入docker内部时候,点击特定图标。
而这个还有另外一个小问题:我使用的docker是官方的selenium/standalone-chrome,他给了vnc【 x11vnc】的登录端口5900,但是登录进去之后没有没有对应的chrome图标,导致我每次都得在本地发送命令启动一个浏览器。这是因为很多 VNC 配置(如 x11vnc 或 tigervnc + 自定义 ~/.vnc/xstartup)只启动了窗口管理器(如 openbox、xfwm)而没有启动完整的桌面面板(panel)或应用菜单。
or
通过docker命令执行定义环境变量时,名称以SE_BROWSER_ARGS_<config_key>开头,后跟配置键(键值由您决定,但请确保定义多个参数时键值唯一)。docker run -d -p 4444:4444
-e SE_BROWSER_ARGS_INCOGNITO=–incognito
-e SE_BROWSER_ARGS_DISABLE_DSHM=–disable-dev-shm-usage
selenium/standalone-chrome:latest这块具体可以看GitHub上的介绍,如果对chromium支持的命令行感兴趣也可以研究。我发现在这样继续下去,整个项目越来越不可控,我就不继续下去,我决定采用
解决方案2来获得cookie。 -
通过selenium gird获取正在运行的浏览器session ID,然后切换。
这个方案同样也需要自己手动打开一个浏览器。但是由于docker使用的vnc版本,无法手动打开,所以还是一样的问题。如果要一劳永逸的解决这个问题,我需要修改docker。
总结:解决方案1最后确实走进了一条比较艰难的路,但是这是针对我个人而言。如果你有大量登录的需求,那么这条路还是走的通的,只要能解决掉JD拒绝,错误代码error 5这个问题,你就可以大量的薅羊毛了。
解决方案2:
这个方案就我得痛点在于,我哪怕使用了chrome插件获取到了cookie,我还是需要登录青龙后台,更新环境变量,然后执行京东相关任务。这块的痛点,我写了一个python来操作,这块就需要使用到青龙面板的API
-
配置一个Client ID 和Client Secret

-
需要注意,我们使用的是open api的接口:
http://localhost:5700/open/auth/token?client_id=xxxxxx&client_secret=xxxxxxxx
如果你登录的时候报的是401错误,那么大概率你用的接口有问题,我就不说我在这个上面折腾了一早上了。具体的程序可以看我的GitHub。
其他的倒是没什么,按照所给的文档编程即可。这块可以看我的GitHub ,我分享出来了。
总结
之前我一直对class类不明所以,不理解什么是面向对象的开发,这次练习过程,deepseek一句话忽然让我豁然开朗,将数据和操作分离,这就让我豁然开朗了。我一直不理解为啥要打包成class,现在明白了,将变量和操作分开,后续的改变或者增加某些操作可以使得数据复用,如果按照我之前的函数式编程,我会一次次的重复获取变量。
只能说一些事到了一定年纪或者经历了足够多才明白。