pyqt5制作某so狗主动提交url并反馈快照更新
一、主动提交
某so狗的主动提交需要账号密码登录,然后再进行post请求,那么自然而然需要保持cookie一致或者session会话一直,这里用到session会比较方便。
1、请求验证码
验证码的源码是svg标签格式,需要通过对svg转成验证码图片,然后才能进行识别,这里识别用到了第三方打码平台,其实有免费的库可以识别或者其他方法,但是准确率不行,很容易造成so狗平台对ip的长时间的封禁,那么花点小钱用平台识别,准确率是比较高的,而且只需要验证一次就可以了。
#from reportlab.graphics import renderPM
#from svglib.svglib import svg2rlg
def code_img(self):
resp = self.session.get(self.verify_url)
f = StringIO(resp.text)
drawing = svg2rlg(f)
print(drawing)
renderPM.drawToFile(drawing,f'common/1.png',fmt='JPG')
img_bytes = renderPM.drawToString(drawing,fmt='JPG')
# self.code = self.ocr.classification(img_bytes)
self.code = self.chaojiying.PostPic(img_bytes, 1004)['pic_str']
print(self.code)
2、登录获取session
保持登录会话一致,用验证码识别结果进行post请求,返回success就表示成功了。
def login_sougou(self):
while True:
self.session.get('https://zhanzhang.sougou.com')
form_data = {
'code':self.code,
'pwd':self.password,
'userid':self.username
}
resp = self.session.post(url=self.login_url,data=form_data,headers=self.headers).json()
print(resp)
# time.sleep(3)
if resp['code'] == 0:
break
else:
self.code_img()
3、url主动提交
再到登录后的页面,进行url主动提交就可以了
def submit_url(self,url):
while True:
from_data = {
"urls": url,
"url": "",
"code": self.code,
"role_id": 2,
"site_id": 64517419,
"site_address": "www.seoyiwu.com",
"urlSubFlag": 'true'
}
resp = self.session.post(url=self.post_url,data=from_data,headers=self.headers).json()
if resp['code'] == 0:
print('已成功推送')
return resp['msg']
elif resp['msg'] == '暂无权限':
print(resp)
return resp['msg']
else:
self.code_img()
self.login_sougou()
二、快照更新
快照更新是不需要登录的。所以会比较方便,那么在代码逻辑中,拿到post地址进行快照更新提交就ok了。
三、designer界面设计
在designer界面中,进行简单的软件设计,整体框架先罗列出来,这里就简单做了一下,没有对样式进行优化,比较简陋一点。
通过命令将ui文件转为py文件
python -m PyQt5.uic.pyuic sougou1.ui -o sougou1.py
将软件各个按钮点击事件与我们之前的python代码进行绑定,再对数据进行界面显示,整体逻辑就这样了。
四、最后运行结果
某狗主动提交
某狗快照更新
这里软件就简单设计了一下,后面将软件封装一下,就可以长期投入使用,如果有需要源码或者软件的话,可以随时私信我。