欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)

程序员文章站 2024-03-16 14:26:40
...

–持续更新中—
可转至我的博客:http://www.dwlufvexyu.com/%e6%9c%80%e6%96%b0-%e8%af%a6%e8%a7%a3%e5%a6%82%e4%bd%95%e6%a8%a1%e6%8b%9f%e7%99%bb%e5%bd%95%e7%9f%a5%e4%b9%8e%ef%bc%882-0-%e6%8c%81%e7%bb%ad%e6%9b%b4%e6%96%b0%ef%bc%81%ef%bc%89/

开始更新:

废话不多讲,一样的直接入正题;

爬取知乎,需要登录;只要登录获得了cookie,便可反复利用

那么首先说说如何最简单的登录知乎?看我的另一篇博文

接下来开始一步一步操作:

最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
首先,第一步:直接 进行 “检查”; 获取到 “密码登录”的xpath元素(直接复制即可)。

#切换登录
change_login = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/div[1]/div[2]')
#进行点击
change_login.click()

Step 2. 直接“检查”到 账号以及密码框;

可以看到<账号 是input name="username" 以及 密码 name="password">

最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
然后直接用find_element_by_name找到 对应输入框,然后利用send_keys进行传值。这里为了避免以前登陆过,进页面会有存有的账号密码导致重复输入,所以先执行ctrl+A进行输入框内容的选中,再进行传值。
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
这里手机号以13579246810,密码admin123为例 ;如图,这里设置延时,为了得到更好的查看效果,为了速度可以不要。

#可以设置延时 
time.sleep(1)
#采用ctrl+a 进行选中输入 进行覆盖 避免追加输入导致账号密码错误
browser.find_element_by_name("username").send_keys(Keys.CONTROL+"a")
browser.find_element_by_name("username").send_keys('13579246810')
time.sleep(1)
browser.find_element_by_name("password").send_keys(Keys.CONTROL + "a")
browser.find_element_by_name("password").send_keys('admin123')
time.sleep(1)

step3.账号密码输入完毕后,进行确定。同样进行 “检查” 找到“确定”的xpath元素。再进行click() ; 等待10s进行判断,这里等待10s是为了 假如登陆成功,需要一定时间进行加载页面;”

login = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/button')
login.click()
#这里如果直接登录成功,则等待10s等待跳转后的页面加载完成
time.sleep(10)
#如果是登录False
login_success=False

那么随机找到一个登陆成功页面的xpath元素,那么就可以判断是已登陆成功,反之False; 如找到如下元素div的xpath,如果存在,那么为True;
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)

while not login_success:
    try:
        notify_ele=browser.find_element_by_class_name('Popover PushNotifications AppHeader-notifications')
        login_success=True
    except:
        pass

如果不存在,登陆失败,则pass继续操作,进行判断中/英文验证码

英文验证码:

最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
中文同样的:
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)

#判断英文验证码还是倒立字验证码
try:
    english_captcha_element = browser.find_element_by_class_name('Captcha-englishImg')
except:
    english_captcha_element = None
try:
    chinese_captcha_element = browser.find_element_by_class_name('Captcha-chineseImg')
except:
    chinese_captcha_element = None

接下来就先识别英文二维码吧:

有三种打码方式 : 编码实现(tesseract-ocr) 识别率低 , 在线打码(云打码) ,人工打码(后两者识别率更高,通过平台提供的API),通常使用在线打码(也就是云打码)

这里我们用 “云打码” 平台(比较好用的在线打码平台),进入官网,我们创建一个用户 以及 一个开发者账号(账号密码可设置为一样) 方便测试;关于为什么 需要创建两个账户,可以百度。这里简要说一下 ,开发者通过平台给用户提供调用API,当用户在线打码成功,开发者会获得相应的分成利润。

如????,可以看到我的开发者用户,测试已经获取0.1的分成了。

最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
用户界面,每次打码都会消耗积分
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
进入开发者中心,下载最新云打码接口最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
下好之后,记得改好文件;如下
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
现在来仔细看英文验证码:从图中可以明显看出是base64加密,且有一段是多余的,除此之外有个坑还~仔细看有个%0A也是多余的
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
所以我们先解码

if english_captcha_element:
    #这里解码同中文倒立字
    #取src
    base64_text = english_captcha_element.get_attribute("src")
    import base64
    #打上断点来debug看看code是什么 
    #替换
    code = base64_text.replace("data:image/jpg;base64,","").replace("%0A","")
    #print(code) 
    f = open("yzm_en.jpeg", "wb")
    f.write(base64.b64decode(code))
    f.close()

多达75次的%0A
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)

接下来就是调用云打码平台提供的api,下面的账号密码是注册的用户的账号密码~

验证码code 如果为空,就继续打码

#采用云解码提供的API 在线打码
#导入之前云打码下载的那个包
from douban.tools.yundama_requests import YDMHttp
#username passwd appID appKey
yundama=YDMHttp("username","passwd",'appid','appkey')
#图片名 及 打码方式
code=yundama.decode("yzm_en.jpeg",5000,60)
#判断是否成功
while True:
    if code == "":
        code = yundama.decode("yzm_en.jpeg",5000,60)
    else:
        break
#成功后自动输入验证码;同样send_keys传入验证码值~
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/div[4]/div/div/label/input').send_keys(code)

如下可以看到已经识别成功了~~~
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
最新 详解如何模拟登录知乎 英文验证码以及中文倒立字(2.0 持续更新)
然后就直接登录成功了~~

-----持续更新------

相关标签: python 知乎网