一、主动提交

某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代码进行绑定,再对数据进行界面显示,整体逻辑就这样了。

四、最后运行结果

某狗主动提交

某狗快照更新

这里软件就简单设计了一下,后面将软件封装一下,就可以长期投入使用,如果有需要源码或者软件的话,可以随时私信我。