专栏首页诡途的python路slenium模拟登陆知乎2020

slenium模拟登陆知乎2020

引言

之所以写这篇文章,主要是因为:

  • 前面写了很多selenium爬虫相关的文章,帮到很多读者解决了不少问题
  • selenium爬虫门槛较低,对初学爬虫的小白比较友好
  • 不知道是有很多读者拿知乎练手,还是知乎碰壁的朋友搜到了我的文章
  • 后台一直有朋友在问为什么按我的方法登陆不成功
  • 之前一直说空了试试,所以便有了今天这篇文章

登录成功

先上selenium登录成功的效果图

解决方案

碰到的问题

先说下碰到的问题,这可能也是很多人碰到的

  • window.navigator.webdriver为 True的问题,这个不多说了,基本上来问我的都是从我前面这篇文章:关于修改window.navigator.webdriver代码失效问题 过来的,我一开始也试了确实是登陆失败的,所以我给出的回复基本上都是我那篇博客是解决修改 window.navigator.webdriver为undefined的问题的,这一步是必要的,没解决的回看一下我前面那篇文章
  • 第二点应该就是大家一直没解决的问题了,如下图,需要验证,这个是个虚假验证,拦直接阶段了后面发送验证码的功能,相当于陷入了while True的死循环里,切换到密码登陆也是一样的

解决方案

其实说起来你可能不信,我自己都不相信竟然如此简单,代码压根不用管 直接用第三方登陆就ok,亲测有效,微信,QQ,微博都ok, 就是下图这几个玩意儿,登录成功之后就可以开始各位的表演了, 天高任鸟飞,海阔凭鱼跃,加油,奥利给

再贴一波代码

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()

#修改windows.navigator.webdriver,防机器人识别机制,selenium自动登陆判别机制
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) 
drive = webdriver.Chrome(options=chrome_options)


#CDP执行JavaScript 代码  重定义windows.navigator.webdriver的值
drive.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
url = 'https://www.zhihu.com/signin?next=%2F'
drive.implicitly_wait(10)
drive.get(url)

想看登录知乎的到这里就ok了,可以撤退了,如果对selenium不太熟悉的可以直接拉到最后,参考资料里,给各位指好路了,没办法,来者是客,为了满足各位,真是老费心了!

看在我这么卖力的份上,点赞,收藏,转发!来一波支持呗(可怜脸)

下面有一小节是本次实验中的意外收获,使用dos命令启动chrome浏览器,然后用selenium接管dos命令新启动的chrome浏览器,然后使用selenium继续后续操作!

其实一开始绕不过验证的时候,我一直想这么搞得,但是没有成功过,这次试验知乎

偶然间实现了,所以下一节的名字叫意外收获,确实意外的惊喜

使用下面的方法登录知乎的话,原理一样,也是直接使用第三方账户登录

意外收获

一种对小白更友好的爬虫方式

一、创建项目文件夹

  • test_chrome作为项目底层文件夹
  • user_data用来存放浏览器数据

二、dos命令启动chrome

chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\test_chrome\user_data"
  • 注意chrome是否加入到了环境变量中
  • 如果没有,cd 切换到目标启动路径后再执行上面的命令
  • eg:C:\Program Files (x86)\Google\Chrome\Application

三、为快捷方式添加参数

首先把桌面上的chrome的快捷方式,复制到程序底层目录 D:\test_chrome

修改快捷方式的属性信息,为快捷方式添加启动参数

  • 在目标后加入cmd当中的参数 –remote-debugging-port=9222 --user-data-dir="./user_data",注意目标里需要与前面chrome.exe直接隔一个空格,否则会报错,目标路径格式不正确之类乱七八糟的,我在这个坑里搞了好久
  • 起始位置为自己的项目路径D:\test_chrome

四、项目启动 如果需要使用selenium进行爬虫,直接在项目底层文件夹下打开这个快捷方式即可 这里相当于手机里的应用双开,与你原先的浏览器是相互隔离的,但是与你的正常浏览器又没有什么区别,会保留所有记录,直接使用selenium 操纵chrome_driver的每次启动都是一个全新的浏览器,相比较而言,这种方法更类似人,对应的也许相比直接驱动更安全

手动启动之后,用selenium接管过来就ok了,后面的模拟操作与之前没两样

接管chrome的代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
# 相当于对你刚刚启动的chrome进行debug  127.0.0.1指本地ip
# 9222是你之前制定的程序端口
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# 指定自己的chromedriver路径
# 如果和我一样是使用的anconda chromedriver丢在scripts下面可以不用指定
#chrome_driver = "D:/Python/Python37/Scripts/chromedriver.exe" 
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
print(driver.title)

参考资料

找了两篇post请求相关的登录知乎文章,算是比较新的文章 进阶玩家可以试试,时间比较久的19年及之前的相关登录知乎的相关文章基本没有借鉴性了

【1】应用Selenium实现知乎模拟登录 【2】python模拟登陆知乎(最新版)


我自己的 selenium相关文章系列 【1】关于修改window.navigator.webdriver代码失效问题 【2】selenium爬虫相关报错解决 【3】python 爬虫之selenium可视化爬虫 【4】出师未捷身先死的sycm数据自动化 【5】一文带你了解Python爬虫(一)——基本原理介绍 【6】一文带你了解Python爬虫(二)——四种常见基础爬虫方法介绍

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • selenium爬虫相关报错解决

    大概意思就是此参数是已经弃用的, 原来的参数chrome_options是被新的参数options替换了;

    诡途
  • (新)关于修改window.navigator.webdriver代码失效问题

    ②关于chrome版本迭代后,代码失效问题解决方案的文章链接 《关于修改window.navigator.webdriver代码失效问题》

    诡途
  • Message: session not created: This version of ChromeDriver only supports Chrome version 83

    一开始我还以为是 webdriver.Chrome() 原来的参数chrome_options被新的参数options替换了的原因

    诡途
  • 应用异常监控利器 Sentry 搭建与学习笔记(修正版)

    Sentry是一家开源公司,提供了一个应用程序监视平台,可以帮助您实时识别问题。 在这里,我们涵盖了有关产品,平台集成和自托管Sentry的所有内容。【通俗讲的...

    jeanron100
  • sentry部署整理 原

    sentry是python开发的一个应用,使用python uWSG框架运行,所有安装完sentry要记得在nginx的代理上禁用掉/admin路径,不然uws...

    domain0
  • 安装sentry

    Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node、Django、RoR 等...

    aox.lei
  • Installing sentry 9.0.0 with postgresql in Centos7

    Sentry是一个开源错误跟踪工具,可帮助您实时监控和修复bug。支持 Python、OC、Java、Go、Node、Django、RoR 等主流编程语言和框架...

    阿dai学长
  • 应用异常监控利器 Sentry 搭建与学习笔记

    Welcome to the Sentry documentation. Sentry is an open-source company,providing ...

    jeanron100
  • sentry:解决给redis设置密码后启动报错

    出于安全考虑,给redis server设置了密码,同时修改了sentry的配置文件/etc/sentry/config.yml

    donghui
  • CRLF (%0D%0A) Injection

    当浏览器向Web服务器发送请求时,Web服务器用包含HTTP响应标头和实际网站内容(即响应正文)的响应进行答复。HTTP标头和HTML响应(网站内容)由特殊字符...

    用户2202688

扫码关注云+社区

领取腾讯云代金券