WenhaoDaiCN / Panda-Learning

已终止该项目
GNU Lesser General Public License v3.0
1.95k stars 647 forks source link

手动输入验证码方法 #440

Open mtnobody opened 5 years ago

mtnobody commented 5 years ago

首先将dingding.py中dd_login_status中的drive的参数加个nohead=False 让他显示界面

def dd_login_status(uname, has_dd=False):
    while True:
        if has_dd:
            dname, pwd = load_dingding("./user/{}/dingding".format(uname))
            print("读取用户信息成功")
        else:
            dname, pwd = get_dd()
        driver_login = mydriver.Mydriver(noimg=False,nohead=False)
        login_status = driver_login.dd_login(dname, pwd)
        if login_status:
            save_dingding("./user/{}/dingding".format(uname), dname, pwd)
            cookies = driver_login.get_cookies()
            break
    return cookies

将mydriver.py中的等待时间从2秒改成60秒(意思是你有60秒的时间输入验证码)

WebDriverWait(self.driver, 2, 0.1).until(lambda driver: driver.find_element_by_class_name("modal")) 变成 WebDriverWait(self.driver, 60, 0.1).until(lambda driver: driver.find_element_by_class_name("modal"))

jzmswe commented 5 years ago

首先将dingding.py中dd_login_status中的drive的参数加个nohead=False 让他显示界面

def dd_login_status(uname, has_dd=False):
    while True:
        if has_dd:
            dname, pwd = load_dingding("./user/{}/dingding".format(uname))
            print("读取用户信息成功")
        else:
            dname, pwd = get_dd()
        driver_login = mydriver.Mydriver(noimg=False,nohead=False)
        login_status = driver_login.dd_login(dname, pwd)
        if login_status:
            save_dingding("./user/{}/dingding".format(uname), dname, pwd)
            cookies = driver_login.get_cookies()
            break
    return cookies

将mydriver.py中的等待时间从2秒改成60秒(意思是你有60秒的时间输入验证码)

WebDriverWait(self.driver, 2, 0.1).until(lambda driver: driver.find_element_by_class_name("modal")) 变成 WebDriverWait(self.driver, 60, 0.1).until(lambda driver: driver.find_element_by_class_name("modal"))

首先感谢这位朋友的热心帮忙,但用Everything找不到dingding.py,直接将你编译好的文件上传,然后说明复制到哪个文件夹,可否? 楼主,你用的不会是Linux OS吧,我用的是Win版熊猫。

lisidan commented 5 years ago

@mtnobody 验证可行 感谢分享!

mtnobody commented 5 years ago

首先将dingding.py中dd_login_status中的drive的参数加个nohead=False 让他显示界面

def dd_login_status(uname, has_dd=False):
    while True:
        if has_dd:
            dname, pwd = load_dingding("./user/{}/dingding".format(uname))
            print("读取用户信息成功")
        else:
            dname, pwd = get_dd()
        driver_login = mydriver.Mydriver(noimg=False,nohead=False)
        login_status = driver_login.dd_login(dname, pwd)
        if login_status:
            save_dingding("./user/{}/dingding".format(uname), dname, pwd)
            cookies = driver_login.get_cookies()
            break
    return cookies

将mydriver.py中的等待时间从2秒改成60秒(意思是你有60秒的时间输入验证码) WebDriverWait(self.driver, 2, 0.1).until(lambda driver: driver.find_element_by_class_name("modal")) 变成 WebDriverWait(self.driver, 60, 0.1).until(lambda driver: driver.find_element_by_class_name("modal"))

首先感谢这位朋友的热心帮忙,但用Everything找不到dingding.py,直接将你编译好的文件上传,然后说明复制到哪个文件夹,可否? 楼主,你用的不会是Linux OS吧,我用的是Win版熊猫。

是用他的python源码运行的,源码在这个项目的Source Packgaes里面

jzmswe commented 5 years ago

首先将dingding.py中dd_login_status中的drive的参数加个nohead=False 让他显示界面

def dd_login_status(uname, has_dd=False):
    while True:
        if has_dd:
            dname, pwd = load_dingding("./user/{}/dingding".format(uname))
            print("读取用户信息成功")
        else:
            dname, pwd = get_dd()
        driver_login = mydriver.Mydriver(noimg=False,nohead=False)
        login_status = driver_login.dd_login(dname, pwd)
        if login_status:
            save_dingding("./user/{}/dingding".format(uname), dname, pwd)
            cookies = driver_login.get_cookies()
            break
    return cookies

将mydriver.py中的等待时间从2秒改成60秒(意思是你有60秒的时间输入验证码) WebDriverWait(self.driver, 2, 0.1).until(lambda driver: driver.find_element_by_class_name("modal")) 变成 WebDriverWait(self.driver, 60, 0.1).until(lambda driver: driver.find_element_by_class_name("modal"))

首先感谢这位朋友的热心帮忙,但用Everything找不到dingding.py,直接将你编译好的文件上传,然后说明复制到哪个文件夹,可否? 楼主,你用的不会是Linux OS吧,我用的是Win版熊猫。

是用他的python源码运行的,源码在这个项目的Source Packgaes里面

多谢指点,这两个文件修改了,请问接下来怎么做?

jzmswe commented 5 years ago

按下面方法操作了,安装python 3.7.4安装版了,还是报错,如果能把你生成的panda.exe上传就多谢了,如果不行就算了,不过还是多谢你的指点。 1 下载源文件 2 将7Z解压中的chome文件夹和原来的user文件夹拷贝到Source Packages文件夹,在此文件夹中可以看到pandalearning.py文件 3 进入pdlearn文件夹修改get_links.py文件 4 cmd进入控制台,进入Source Packages文件夹 运行python pandalearning.py 用户名(即原来user文件夹保存的用户信息)

mtnobody commented 5 years ago

按下面方法操作了,安装python 3.7.4安装版了,还是报错,如果能把你生成的panda.exe上传就多谢了,如果不行就算了,不过还是多谢你的指点。 1 下载源文件 2 将7Z解压中的chome文件夹和原来的user文件夹拷贝到Source Packages文件夹,在此文件夹中可以看到pandalearning.py文件 3 进入pdlearn文件夹修改get_links.py文件 4 cmd进入控制台,进入Source Packages文件夹 运行python pandalearning.py 用户名(即原来user文件夹保存的用户信息)

要安装selenium 这个包: pip install selenium

然后他目录下也要放一个chrome.

jzmswe commented 5 years ago

按下面方法操作了,安装python 3.7.4安装版了,还是报错,如果能把你生成的panda.exe上传就多谢了,如果不行就算了,不过还是多谢你的指点。 1 下载源文件 2 将7Z解压中的chome文件夹和原来的user文件夹拷贝到Source Packages文件夹,在此文件夹中可以看到pandalearning.py文件 3 进入pdlearn文件夹修改get_links.py文件 4 cmd进入控制台,进入Source Packages文件夹 运行python pandalearning.py 用户名(即原来user文件夹保存的用户信息)

要安装selenium 这个包: pip install selenium

然后他目录下也要放一个chrome.

安装selenium了,还是不行,算了,不折腾了,多谢你的热心指点。

Tochase commented 5 years ago

@mtnobody 同验证可行,感谢🙏

liuxun1987 commented 5 years ago

Traceback (most recent call last): File ".\pandalearning.py", line 4, in from pdlearn import version File "D:\Tools\Panda-Learning-2.5\Source Packages\pdlearn\version.py", line 1, in import requests ModuleNotFoundError: No module named 'requests'

请问这个怎么解?谢谢

jackysnoopy commented 5 years ago

多谢分享,问题解决。接下来如果想用计划任务来实现的话就要加入OCR了,识别验证码后输入,打算使用tesseract来识别,等有空了把这块骨头啃下来。

Colwzq commented 5 years ago

Traceback (most recent call last): File ".\pandalearning.py", line 4, in from pdlearn import version File "D:\Tools\Panda-Learning-2.5\Source Packages\pdlearn\version.py", line 1, in import requests ModuleNotFoundError: No module named 'requests'

请问这个怎么解?谢谢

cmd下pip install requests即可 这是小问题 如果有发现类似报错 一并pip install XXX即可

lofter414 commented 5 years ago

修改后有如下错误:

Mydriver初始化失败
========================================================================================================================
Traceback (most recent call last):
  File "/root/xuexiqiangguo/pandalearning.py", line 180, in <module>
    cookies, a_log, v_log = user_flag(dd_status, uname)
  File "/root/xuexiqiangguo/pandalearning.py", line 15, in user_flag
    cookies = dingding.dd_login_status(uname, has_dd=True)
  File "/root/xuexiqiangguo/pdlearn/dingding.py", line 23, in dd_login_status
    driver_login = mydriver.Mydriver(noimg=False,nohead=False)
  File "/root/xuexiqiangguo/pdlearn/mydriver.py", line 54, in __init__
    self.driver = self.webdriver.Chrome(chrome_options=self.options)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /opt/google/chrome/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=72.0.3626.7 (efcef9a3ecda02b2132af215116a03852d08b9cb),platform=Linux 3.10.0-957.10.1.el7.x86_64 x86_64)