吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 618|回复: 5
收起左侧

[求助] 问一个关于PYTHON类属性调用方法的问题

[复制链接]
hahawangzi 发表于 2020-9-8 10:09
请看下文代码

class xxgame():

def baidu(self):
    self.APP_ID='2180368'
    self.API_KEY='EYAvb2oTaGa9oSNs5S2yx6v'
    self.SECRET_KEY='dmgvBELGq9cMvk2uSPqLUaLUpEng02D'
    self.aip=AipOcr(self.APP_ID,self.API_KEY,self.SECRET_KEY) #1.这里定义的self.aip 3. 如果 我把这个self.aip定义在__init__(self)里面就不会报错。
def open(self):
    self.url='http://www.xxgame.net/account/login'
    self.driver=webdriver.Chrome()
    self.driver.get(self.url)
    time.sleep(5)
    self.driver.find_element_by_id('UserName').send_keys('13600533179')
    self.driver.find_element_by_id('Password').send_keys('hahawangzi1')
    self.driver.save_screenshot('window.png')
    self.cd =self.driver.find_element_by_id('imgValidateCode')
    print(self.cd.location)
    self.left=self.cd.location['x']
    self.top=self.cd.location['y']
    self.right=self.cd.size['width']+self.left
    self.height=self.cd.size['height']+self.top
    self.im=Image.open("window.png")
    self.img=self.im.crop((self.left,self.top,self.right,self.height))
    self.img.save('w2.png')
    self.duqu() 

def duqu(self):
    with open('w2.png','rb') as fb:
        self.img1 =fb.read()
        self.result = self.aip.basicGeneral(self.img1)#注意看这里2. 这里调用 self.aip这个属性会报错,找不到这个属性 在看上面3
        self.obj=json.dumps(self.result)
        self.obj2=json.loads(self.obj)
        self.pan=re.compile("\d+")
        print(self.result)
        print(str(re.findall(self.pan,str(self.obj2['words_result']))).strip('[]').strip("''"))
        self.yzm=str(re.findall(self.pan,str(self.obj2['words_result']))).strip('[]').strip("''")
        self.driver.find_element_by_id("LAY-user-login-vercode").send_keys(self.yzm)
        self.driver.find_element_by_class("layui-btn layui-btn-fluid").click()        #   看这里4.这里我调用open(self)实例里面的属性 self.driver.find_element_by_id()就不会报错,同样是调用实例,这是为什么呢? 

if name=="main":
x = xxgame()
x.open()

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

longzhouming 发表于 2020-9-8 10:29
本帖最后由 longzhouming 于 2020-9-8 10:35 编辑

属性一般都是在__init__里定义的 只在方法里定义赋值的属性 很可能会因为那个方法没调用 就找不到

不过你每一行代码都是self.xxxx 也算是神了。。。类是这么写的嘛。。。

还有就是自己的baidu api的key就不要直接放出来了 好歹编辑下。。。
pzx521521 发表于 2020-9-8 10:34
本帖最后由 pzx521521 于 2020-9-8 10:35 编辑

楼上正解...  类不能这么乱写哦~
因为 self.driver 是 open里面声明的-> 调用了  open 才有 self.driver 不会报错
因为 self.aip是 baidu 里面声明的->没有 调用了  baidu 所以 没有 self.aip 会报错
__init__ 是构造方法, 对象生成的时候会自动执行 所以self.aip定义在__init__(self)里面就不会报错
 楼主| hahawangzi 发表于 2020-9-8 11:10
longzhouming 发表于 2020-9-8 10:29
属性一般都是在__init__里定义的 只在方法里定义赋值的属性 很可能会因为那个方法没调用 就找不到

不过 ...

多谢提醒,百度KEY aip 里面少几个数字的  能帮我的代码重新写一个吗,我这个写的不好,我想学习一下 可否?
 楼主| hahawangzi 发表于 2020-9-8 11:19
longzhouming 发表于 2020-9-8 10:29
属性一般都是在__init__里定义的 只在方法里定义赋值的属性 很可能会因为那个方法没调用 就找不到

不过 ...

不需要所有的定义的实例 都用SELF.吧?
 楼主| hahawangzi 发表于 2020-9-8 11:48

def baidu(self):
self.APP_ID='21803698'
self.API_KEY='EYAvb2oTaGa9oSNs53S2yx6v'
self.SECRET_KEY='dmgvBELGq9cMvk2uSPqwLUaLUpEng02D'
self.aip=AipOcr(self.APP_ID,self.API_KEY,self.SECRET_KEY)
def duqu(self):
with open('w2.png','rb') as fb:
img1 =fb.read()
self.baidu()
result = self.aip.basicGeneral(img1)
obj=json.dumps(result)
obj2=json.loads(obj)
pan=re.compile("\d+")
print(result)
print(str(re.findall(pan,str(obj2['words_result']))).strip('[]').strip("''"))
yzm=str(re.findall(pan,str(obj2['words_result']))).strip('[]').strip("''")

def open(self):
    url='http://www.xxgame.net/account/login'
    driver=webdriver.Chrome()
    driver.get(url)
    time.sleep(5)
    driver.find_element_by_id('UserName').send_keys('13600533179')
    driver.find_element_by_id('Password').send_keys('hahawangzi1')
    driver.save_screenshot('window.png')
    cd =driver.find_element_by_id('imgValidateCode')
    print(cd.location)
    left=cd.location['x']
    top=cd.location['y']
    right=cd.size['width']+left
    height=cd.size['height']+top
    im=Image.open("window.png")
    img=im.crop((left,top,right,height))
    img.save('w2.png')
    self.duqu() 
    driver.find_element_by_id("LAY-user-login-vercode").send_keys(self.duqu().yzm)#这一步报错,这里无法调用yzm 也就是duqu里面的实例属性 这是为什么
    driver.find_element_by_id("btnSubmit").click()
    time.sleep(5)

def page(self):
    cookies=self.driver.get_cookies()
    jsonc=json.dumps()
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 13:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表