selenium(java)通过Cookie跳过登录验证码

本文介绍了一种通过抓取并利用Cookie信息实现网站自动登录的方法。以百度为例,使用Fiddler工具抓取关键参数“BAIDUID”和“BDUSS”,并通过Selenium将这些Cookie添加到浏览器会话中,从而跳过登录过程。
部署运行你感兴趣的模型镜像

学习selenium的Cookie这一节,用了很多时间都没有成功捕获登录信息实现自动登录,如果只是单纯使用getCookies()方法并不能获取Cookie里关键参数的name和value。,比如通过firebug,虽然可以看到www.baidu.com这个网页的cookie内容,但是实际允许登录的“BDUSS”这个参数并没有在cookie内容里体现。

最后还是搜到了虫师的文章,详细讲了如何通过fiddler抓包工具获取baidu的cookie的重要参数信息。

这里再补充一下,由于Host为"passport.baidu.com"的消息有很多条,需要找到Host为"passport.baidu.com",URL为v2/api/?login 的消息,查看右侧窗口Response里Set-Cookie的内容。

Cookie的处理分为:

服务器向客户端发送cookie

浏览器将cookie保存

之后每次http请求浏览器都会将cookie发送给服务器端

服务器端向客户端发送Cookie是通过HTTP响应报文实现的,在Set-Cookie中设置需要像客户端发送的cookie。



参考文章:通过Cookie跳过登录验证码


准备工具:

------------------

fiddler

Python+selenium

------------------

以百度登录为例。

验证码是汉字的,我想通过程序识别起来有点难度,也会比较麻烦。

 

接下来开始动手。

1、开启Fiddler 工具,像这样!

 

2、通过浏览器登录正常登录百度账号。像这样!

 

3、通过Fiddler获取登录请求的Cookie。找到Host为“passport.baidu.com”的URL,在右侧窗口查看该请求的Cookie

然后,找到重要的两个参数BAIDUID”和“BDUSS”。

 

4、编写Selenium自动化测试脚本,跳过登录。

复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

# 添加Cookie
driver.add_cookie({'name':'BAIDUID','value':'AAAAAAAAAAAAAA:FG=1'})
driver.add_cookie({'name':'BDUSS','value':'AAAAAAAAAAAAAAAAAAAAAAAAAA'})

# 刷新页面
driver.refresh()

# 获取登录用户名并打印
username = driver.find_element_by_class_name("user-name").text
print(username)

#关闭浏览器
driver.quit()
复制代码

首先,访问百度首页,处于未登录状态。

然后,通过Selenium所提供add_cookie()方法添加Cookie信息。

最后,刷新页面,现在已经是登录状态了,获取登录之后的用户名并打印。


附上自己用java实现的代码:

package cookie;

import java.util.Set;

import org.apache.http.auth.UsernamePasswordCredentials;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class CookieBaidu {
	public static void main(String[] args) throws InterruptedException {
		WebDriver driver = new FirefoxDriver();
		driver.get("http://www.baidu.com");
		Thread.sleep(3000);
		System.out.println(driver.manage().getCookies());
		
		// 通过fiddler抓包工具,找到Host为“passport.baidu.com”的URL,在右侧窗口查看该请求的Cookie,
		// 找到重要的两个参数“BAIDUID”和“BDUSS”
		Cookie c1 = new Cookie("BAIDUID", "66666666666666666666666:FG=1");
		Cookie c2 = new Cookie("BDUSS", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN~e-lnf3vpZc");
		
		driver.manage().addCookie(c1);
		driver.manage().addCookie(c2);
		
		driver.navigate().refresh();
		
		// 获得登录用户名
		String username = driver.findElement(By.className("user-name")).getText();
		System.out.println("username = " + username);
		
		System.out.println(driver.manage().getCookies());
		
		Thread.sleep(3000);
		driver.quit();
		
	}

}


您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我需要帮助用户解决如何使用SeleniumCookie绕过登录验证码的问题。首先,我需要理解用户的需求。用户提到他们已经在使用Selenium Undetected ChromeDriver来避免被检测,现在想结合Cookie跳过登录时的验证码。这可能是因为频繁登录容易触发验证码,而使用已登录Cookie可以避免重复登录,从而绕过验证码。 首先,我应该回顾一下Selenium如何处理CookieSelenium提供了add_cookie方法,可以用来添加Cookie到当前会话中。用户可能需要先手动登录一次,保存登录后的Cookie,然后在后续的自动化脚本中加载这些Cookie,从而跳过登录步骤,避免触发验证码。 接下来,我需要考虑如何具体实现这个过程。步骤可能包括:首次手动登录并保存Cookie,然后在自动化脚本中加载这些Cookie。需要注意的是,加载Cookie前必须访问目标网站,以便设置正确的域名。此外,使用Undetected ChromeDriver可以帮助避免被检测,但还需要确保Cookie的有效性,比如过期时间等问题。 另外,用户可能不知道如何正确保存和加载Cookie,可能需要代码示例。例如,使用pickle模块保存和读取Cookie文件。同时,要提醒用户注意Cookie的时效性和网站可能的安全措施,比如定期更换Session ID等潜在问题。 可能遇到的问题包括:Cookie过期、域名不匹配、安全设置导致Cookie无效等。因此,在回答中需要提到这些注意事项,帮助用户避免常见错误。 最后,生成的相关问题需要围绕这个主题,比如如何保持Cookie有效、其他绕过验证码的方法,以及Undetected ChromeDriver的更多使用技巧。这些相关问题可以帮助用户进一步解决可能遇到的挑战。</think>要使用Selenium通过Cookie绕过登录验证码,主要分为两个阶段:首次登录保存Cookie和后续会话加载Cookie。以下是具体实现步骤: ### 一、首次登录保存Cookie 1. 手动完成首次登录并保存会话Cookie ```python from selenium.webdriver import Chrome import undetected_chromedriver as uc import pickle import time driver = uc.Chrome() driver.get("https://target-website.com/login") # 手动输入账号密码,完成验证码验证后 input("完成登录后按回车继续...") # 保存Cookie到文件 with open("cookies.pkl", "wb") as f: pickle.dump(driver.get_cookies(), f) driver.quit() ``` *注意:验证码只需首次登录时处理,后续使用Cookie跳过此步骤* ### 二、自动加载Cookie访问 ```python def load_cookies(driver, cookies): driver.get("https://target-website.com/") # 先访问域名 for cookie in cookies: # 处理特殊字符并设置Cookie driver.add_cookie({ 'name': cookie['name'], 'value': cookie['value'], 'domain': cookie['domain'], 'path': cookie['path'], 'secure': cookie['secure'] }) driver = uc.Chrome() with open("cookies.pkl", "rb") as f: cookies = pickle.load(f) load_cookies(driver, cookies) driver.refresh() # 刷新页面应用Cookie ``` *该方法通过复用已认证的会话信息避免触发登录验证流程[^1]* ### 关键注意事项 1. Cookie有效期管理:定期检查Cookie是否过期 2. 域名匹配:确保加载Cookie时已访问正确域名 3. 浏览器指纹:使用undetected-chromedriver防止检测 4. 请求频率控制:避免异常流量模式触发安全机制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值