100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录

  • 专栏导读
  • 1. 前言
  • 2. 实现步骤
  • 3. 基础补充
  • 4. 代码实战
    • 4.1 创建连接
    • 4.2 添加请求头伪装浏览器
    • 4.3 隐藏浏览器指纹
    • 4.4 最大化窗口
    • 4.5 启动网页
    • 4.6 点击密码登录
    • 4.7 输入账号密码
    • 4.8 点击登录按钮
    • 4.9 完整代码
    • 4.10 GIF动图展示
  • 五、总结

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
    在这里插入图片描述
    在这里插入图片描述

1. 前言

上文我们学习了通过cookie登录网站,接下来我们来学用代码输入账号信息登录网,测试网站某宝。

2. 实现步骤

下面是某宝的登录界面,接下来我们需要实现的步骤是:

  • 1、打开网页
  • 2、输入账号信息
  • 3、输入密码信息
  • 4、点击 “登录” 按钮

在这里插入图片描述

3. 基础补充

由于某宝的反爬技术很高超,这里我们需要用到网页元素定位操作隐藏浏览器指纹,还不会的小伙伴学习一下专栏文章:

  • 100天精通Python(爬虫篇)——第47天:selenium自动化操作浏览器(基础+代码实战)
  • 100天精通Python(实用脚本篇)——第115天:基于selenium实现反反爬策略之隐藏浏览器指纹特征

4. 代码实战

4.1 创建连接

from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 1. 创建连接
# 创建ChromeOptions对象,用于配置Chrome浏览器的选项
chrome_options = webdriver.ChromeOptions()
# 添加启动参数,'--disable-gpu'参数用于禁用GPU加速,适用于部分平台上的兼容性问题
chrome_options.add_argument('--disable-gpu')

4.2 添加请求头伪装浏览器

通过添加请求头伪装成正常的浏览器信息:

# 2. 添加请求头伪装浏览器
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36')
driver = webdriver.Chrome(chrome_options=chrome_options)

4.3 隐藏浏览器指纹

执行 stealth.min.js 文件进行隐藏浏览器指纹特征:

# 3. 执行 `stealth.min.js` 文件进行隐藏浏览器指纹
with open('stealth.min.js') as f:js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})

4.4 最大化窗口

为了方便大家看登录操作,设置浏览器 全屏:

# 4. 最大化浏览器窗口
driver.maximize_window()

4.5 启动网页

# 5. 发送请求,打开网页
driver.get('https://login.taobao.com/member/login.jhtml')
time.sleep(1)

4.6 点击密码登录

1、有时候打开某宝的登录界面,它想让我们扫码登录,这时候我们就需要点击密码登录:

在这里插入图片描述
2、这个标签有个js,本想通过执行js点击元素,结果发现执行不成功也不报错(原因未知大家可以自行尝试下),所以选择定位xpath:

在这里插入图片描述

元素的xpath地址:

//div[@class='login-blocks qrcode-bottom-links']/a[1]

3、通过find_element方法定位元素的xpath,由于这个界面是有几率触发,所以写一个异常捕获防止报错,通过click()方法点击元素:

# 6. 点击账号密码登录
try:# 找到登录按钮元素button = driver.find_element(by=By.XPATH, value="//div[@class='login-blocks qrcode-bottom-links']/a[1]")# 点击登录按钮button.click()
except:pass

4.7 输入账号密码

注意事项:有ID找ID(ID是唯一的),没ID找其他标签

1、确定账号、密码输入框的标签信息:

在这里插入图片描述

账号框ID为:

fm-login-id

密码框ID为:

fm-login-password

2、通过find_element方法定位文本框,通过send_keys方法输入账号信息:

# 7. 输入账号密码
username_input = driver.find_element(by=By.ID, value="fm-login-id") # 定位账号框
username_input.send_keys("your_username")  # 输入账号信息(这里自行替换)password_input  = driver.find_element(by=By.ID, value="fm-login-password") # 定位密码框
password_input .send_keys("your_username")  # 输入密码信息(这里自行替换)

4.8 点击登录按钮

1、刚开始试过,用这个登录按钮classes ID定位,但是代码无法定位成功,所以还是选择xpath定位:

在这里插入图片描述
登录按钮xpath地址:

//button[@class='fm-button fm-submit password-login']

2、通过find_element方法定位xpath,通过click()方法点击元素:

# 8. 点击登录按钮元素
login_button = driver.find_element(by=By.XPATH, value="//button[@class='fm-button fm-submit password-login']")
# 点击登录按钮
login_button.click()

4.9 完整代码

下面是完整登录代码,需要替换自己的账号密码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 1. 创建链接
# 创建ChromeOptions对象,用于配置Chrome浏览器的选项
chrome_options = webdriver.ChromeOptions()
# 添加启动参数,'--disable-gpu'参数用于禁用GPU加速,适用于部分平台上的兼容性问题
chrome_options.add_argument('--disable-gpu')# 2. 添加请求头伪装浏览器
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36')
driver = webdriver.Chrome(chrome_options=chrome_options)# 3. 执行 `stealth.min.js` 文件进行隐藏浏览器指纹
with open('stealth.min.js') as f:js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})# 4. 最大化浏览器窗口
driver.maximize_window()# 5. 发送请求,打开网页
driver.get('https://login.taobao.com/member/login.jhtml')
time.sleep(1)# 6. 点击账号密码登录
try:# 找到登录按钮元素button = driver.find_element(by=By.XPATH, value="//div[@class='login-blocks qrcode-bottom-links']/a[1]")# 点击登录按钮button.click()
except:pass# 7. 输入账号密码
username_input = driver.find_element(by=By.ID, value="fm-login-id") # 定位账号框
username_input.send_keys("your_username")  # 输入账号信息(这里自行替换)password_input  = driver.find_element(by=By.ID, value="fm-login-password") # 定位密码框
password_input .send_keys("your_username")  # 输入密码信息(这里自行替换)# 8. 点击登录按钮元素
login_button = driver.find_element(by=By.XPATH, value="//button[@class='fm-button fm-submit password-login']")
# 点击登录按钮
login_button.click()# 9. 接下来就可以进行网页信息的解析了,自行编写。。。

4.10 GIF动图展示

在这里插入图片描述

五、总结

爬虫是一个很玄学的技术,本文中4.6执行js和4.8元素定位操作明明是正确的却还是要报错,就不得不换一种网页元素定位方法,所以大家遇到报错不要心慌,不妨换一个操作进行尝试,我们下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2810099.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

出现猫毛过敏后怎么养猫?性价比高的宠物空气净化器推荐

作为一名猫奴,我深知每天撸猫的快乐,但也深知鼻子受不了的痛苦。对于养宠家庭来说,猫咪的毛发无处不在,沙发、地板、衣服都是重灾区,不仅难以清理,而且可能会让呼吸道敏感的朋友过敏。为了解决除猫毛的问题…

迅推客媒体发布平台,让你的新闻轻松登上各大媒体

媒体发布稿件是个人或企业推广自己和产品的重要手段。良好的媒体发布过程可以给企业带来更多的曝光度和知名度,促进销售。然而,如何选择合适的新闻发布平台,如何在各大新闻媒体网站上发布新闻稿,是许多企业面临的问题。今天&#…

卷积神经网络 CNN

目录 卷积网络与传统网络的区别 参数共享 卷积神经网络整体架构 卷积操作的作用 卷积核的定义 卷积特征值计算方法 卷积层涉及的参数 边缘填充 ​编辑 卷积结果计算 池化层 整体网格架构 VGG网络架构 残差网络Resnet 卷积网络与传统网络的区别 卷积神经网络&#x…

免费分享一套SpringBoot+Vue实验室(预约)管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue实验室(预约)管理系统 ,分享下哈。 项目视频演示 【免费】SpringBootVue实验室(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue实验室(预约)管理系统 Java毕…

2024年青海省考公告已出,速速查收报名详细流程,千万不要错过报名时间哦

2024年青海公务员考试公告职位表已经发布,报名时间2月26日9:00至3月1日18:00, 以下是本次考试的重要时间安排: 报名时间:2024年2月26日9:00至3月1日18:00 缴费时间:2024年2月26日9:00至3月4日23:30 报名调剂时间&a…

【嵌入式——QT】SpinBox

QSpinBox用于整数的显示和输入,一般显示十进制数,也可以显示二进制、十六进制数,而且可以在显示框中增加前缀和后缀。QDoubleSpinBox用于浮点数的显示和输入,可以设置显示小数位数,也可以设置显示的前缀和后缀。 样式…

ZTE E8820V2重启偶现5G wifi丢失问题

使用ZTE E8820V2设备时,发现设备在多次重启过程中会出现5G wifi信号丢失的情况。 1. 现象日志 使用老毛子固件,具体丢失时会出现相关log: 2. 问题原因: GPIO#19 是 PCIE reset 外,GPIO#26 也要 reset。 3. 解决方法: E8820V2/rt-n56u/trunk$ git diff linux-3.4.x…

Spring的另一大的特征:AOP

目录 AOP (Aspect Oriented Programming)AOP 入门案例(注解版)AOP 工作流程——代理AOP切入点表达式AOP 通知类型AOP通知获取数据获取切入点方法的参数获取切入点方法返回值获取切入点方法运行异常信息 百度网盘分享链接输入密码数…

MySQL 篇-深入了解 DDL 语言(一)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 MySQL 说明 2.0 DDL 语言 2.1 DDL 语言 - 定义数据库 2.1.1 创建数据库操作 2.1.2 查看数据库操作 2.1.3 使用数据库操作 2.1.4 删除数据库操作 2.2 DDL 语言 …

JAVA工程师面试专题-《Redis》篇

目录 一、基础 1、Redis 是什么 2、说一下你对redis的理解 3、Redis 为什么这么快? 4、项目中如何使用缓存? 5、为什么使用缓存? 6、Redis key 和value 可以存储最大值分别多是多少? 7、Redis和memcache有什么区别&#xf…

【自译】MIT麻省理工学院技术双月刊(The Bimonthly MIT Technology Review)125周年纪念词

上期 MIT Review 链接:创新版块概览(二) MIT Technology Review 125 原文 Happy Anniversary For 125 years, Technology Review has aimed to explain the “always new and ever more complex problems” we face. “To a community gr…

YOLOv9尝鲜测试五分钟极简配置

pip安装python包: pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码: import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…

c# 广度优先搜索(Breadth-First Search,BFS)

在这篇文章中我将讨论用于树和图的两种遍历机制之一。将使用 C# 示例介绍广度优先搜索 (BFS)。图是最具挑战性和最复杂的数据结构之一。 广度优先搜索的工作原理:广度优先搜索 (BFS)是一种探索树或图的方法。在 BFS 中,您首先探索…

教你 3 分钟用 Hexo 建立一个纯静态、高性能的个人博客

只要会使用命令行,执行简单的命令。那么,用 Hexo 建立一个个人博客的过程,称得上是轻松愉快且简单! 我会以 Mac 操作系统作为例子,因为在 Mac 上实现这一切更为简单,因为 Mac 操作系统的命令行环境相对来说…

荣耀MWC发布AI使能的全场景战略

【2024年2月25日,巴塞罗那】荣耀在2024 MWC世界移动通信大会上正式发布了全新的AI使能的全场景战略,推出平台级AI赋能,以人为中心的跨操作系统体验和基于意图识别的全新人机交互,以及与全球合作伙伴合作的荣耀Magic6 Pro&#xff…

前端基础面试题(一)

摘要:最近,看了下慕课2周刷完n道面试题,记录下... 1.请说明Ajax、Fetch、Axios三者的区别 三者都用于网络请求,但维度不同: Ajax(Asynchronous Javascript ang XML),是一种在不重新…

Matryoshka Representation Learning (MRL)-俄罗斯套娃向量表征学习

前言 在2024年1月底OpenAI发布新的向量模型,并提到新的向量模型支持将向量维度缩短。向量模型支持缩短维度而又不会威胁到向量的表示能力的原因在于使用了Matryoshka Representation Learning。 Matryoshka Representation Learning (MRL)是2022年发表的论文&#…

Redis 服务集群、哨兵、缓存及持久化的实现原理和应用场景

Redis 是一种高性能的键值存储系统,已经成为了许多企业和互联网公司的核心技术之一。本文将介绍 Redis 的服务集群、哨兵以及缓存实现原理和应用场景,以帮助读者更好地理解和使用 Redis。 引言: 随着互联网应用规模不断扩大,Redi…

RocketMQ - RocketMQ的架构原理和使用方法

1. MQ如何集群化部署来支撑高并发访问 假设RocketMQ部署在一台机器上,即使这台机器的配置很高,但是一般来说一台机器也就支撑10万的并发访问。 这个时候,假设有大量的系统都要往RocketMQ里高并发的额写入消息,可能达到每秒有几十…

canvas水波纹效果,jquery鼠标水波纹插件

canvas水波纹效果&#xff0c;jquery鼠标水波纹插件 效果展示 jQuery水波纹效果&#xff0c;canvas水波纹插件 HTML代码片段 <div class"scroll04wrap"><h3>发展历程</h3><div class"scroll04"><p>不要回头&#xff0c;一…