一、主动提交
某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
)
(
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'
]
(
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
()
(
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
:
(
'已成功推送'
)
return
resp
[
'msg'
]
elif
resp
[
'msg'
]
==
'暂无权限'
:
(
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代码进行绑定,再对数据进行界面显示,整体逻辑就这样了。
四、最后运行结果
某狗主动提交
某狗快照更新
这里软件就简单设计了一下,后面将软件封装一下,就可以长期投入使用,如果有需要源码或者软件的话,可以随时私信我。