Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 779|回复: 0

selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)

[复制链接]
  • TA的每日心情
    奋斗
    昨天 14:53
  • 签到天数: 453 天

    [LV.9]以坛为家II

    1763

    主题

    1821

    帖子

    49万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    490788
    发表于 2021-4-29 09:07:36 | 显示全部楼层 |阅读模式

    一、问题
    使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selenium的继续访问。这也算是比较高级的反爬取措施。

    二、解决
    解决方法,使用自己打开的一个浏览器,再用selenium接管这个浏览器这样就可以完成反爬的处理。
    1.建议一个新的映射,以保存原来的chrome不被污染
    1)添加环境变量
    chrome.exe放入系统环境变量中,找到驱动位置添加变量,如果没找到,最快的方法就是点击图标右键,点击访问文件地址
    chrome.exe位置


    快捷访问方式,在菜单栏同样可以


    2)新建一个存放新环境的文件夹并映射
    使用指令【chrome.exe --remote-debugging-port=9222 --user-data-dir="E:\data_info\selenium_data"】
    其中--remote-debugging-port是建立新的移植位置,其中端口后面会使用(自定义), --user-data-dir是数据存储的目录(自定义)

    此时会打开一个网页放着就行

    2.selenium代码接管
    通过下面的代码就可以登录知乎

    import time import json from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait class ZhiHu: def __init__(self): self.url = 'https://www.zhihu.com/' self.chrome_options = Options() self.chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")  # 前面设置的端口号
            self.browser = webdriver.Chrome(executable_path=r'E:\Environment\python_global\Scripts\chromedriver.exe', options=self.chrome_options)  # executable执行webdriver驱动的文件
    
        def get_start(self): self.browser.get(self.url) # time.sleep(20) # 可以选择手动登录或者是自动化,我这里登录过就直接登陆了
            info = self.browser.get_cookies()  # 获取cookies
            print(info) with open(r"..\download_txt\info.json", 'w', encoding='utf-8') as f: f.write(json.dumps(info)) if __name__ == '__main__': zhihu = ZhiHu() zhihu.get_start()


    三、结果展示


    四、总结
    利用这个selenium接管正在使用的浏览器就可以绕过知乎的反爬,当然也可以做更多的爬虫,selenium在爬虫的使用中还是有重要的地位,偷懒一点就可以使用这个。这种方法可以获取cookies这样在使用其他的爬虫,就可以使用这个cookies会加快爬取的效率,以及突破不适用浏览器的反爬措施。这引起我们另一个思考,我们直接接管我们正常的chrome好像更加的高效,这个可以以后的学习中尝试一下。

    五、参考
    附一些参考,方便自己学习,毕竟每次百度起来都很麻烦
    https://www.cnblogs.com/HJkoma/p/9936434.html
    https://blog.csdn.net/qq_42206477/article/details/86477446

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2022-12-9 16:30 , Processed in 0.063069 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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