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

本文主要是介绍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元素定位操作明明是正确的却还是要报错,就不得不换一种网页元素定位方法,所以大家遇到报错不要心慌,不妨换一个操作进行尝试,我们下期见!

这篇关于100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748421

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)