破解验证码的实用技巧:使用 R 和 RSelenium 实现
在现代网页应用中,图形验证码是一种常见的防护措施,但这也给自动化测试带来了挑战。本文将介绍两种有效的方法来处理验证码:获取验证码图片链接和使用 RSelenium 进行截屏和裁剪。
方法一:获取验证码图片地址并下载
我们可以尝试获取验证码的图片链接并下载它。以下是 R 语言的实现代码:
r
library(RSelenium)
启动 RSelenium
rD <- rsDriver(browser = "firefox", port = 4445L, verbose = FALSE)
remDr <- rD[["client"]]
打开登录页面
remDr$navigate("http://example.com/login")
更多内容访问ttocr.com或联系1436423940
获取验证码图片链接
captcha_src <- remDr$findElement(using = "css selector", value = "#captchaImage")$getElementAttribute("src")
img_url <- paste0(captcha_src, ".png") # 拼接下载地址
file_name <- paste0("img/login/", sample(1:100000, 1), ".png") # 随机文件名
下载验证码图片
download.file(img_url, destfile = file_name, mode = "wb")
cat("验证码图片保存成功:", file_name, "\n")
关闭浏览器
remDr$close()
rD$server$stop()
方法二:使用 RSelenium 截屏并裁剪验证码
如果获取链接不可靠,我们可以通过截屏获取验证码。以下是 R 语言的实现代码:
r
library(RSelenium)
library(magick)
启动 RSelenium
rD <- rsDriver(browser = "firefox", port = 4445L, verbose = FALSE)
remDr <- rD[["client"]]
打开登录页面
remDr$navigate("http://example.com/login")
截取整个页面
screenshot <- remDr$screenshot(display = TRUE)
定位验证码元素
captcha_element <- remDr$findElement(using = "css selector", value = "#captchaImage")
location <- captcha_element$getElementLocation()
size <- captcha_element$getElementSize()
裁剪验证码
img <- image_read(screenshot)
captcha_img <- image_crop(img, geometry_area(size$width, size$height, location$x, location$y))
captcha_file_name <- paste0("img/login/", sample(1:100000, 1), "_captcha.png")
image_write(captcha_img, path = captcha_file_name)
cat("验证码裁剪并保存成功:", captcha_file_name, "\n")
关闭浏览器
remDr$close()
rD$server$stop()
输入验证码并登录
最后,我们可以使用 tesseract 识别验证码内容,并将其输入到登录框中。以下是示例代码:
r
library(RSelenium)
library(magick)
library(tesseract)
启动 RSelenium
rD <- rsDriver(browser = "firefox", port = 4445L, verbose = FALSE)
remDr <- rD[["client"]]
打开登录页面
remDr$navigate("http://example.com/login")
输入用户名和密码
remDr$findElement(using = "css selector", value = "#username")$sendKeys("your_username")
remDr$findElement(using = "css selector", value = "#password")$sendKeys("your_password")
识别验证码并输入
captcha_file_path <- "img/login/your_captcha_file.png" # 替换为实际文件路径
captcha_text <- tesseract::ocr(captcha_file_path)
remDr$findElement(using = "css selector", value = "#captchaInput")$sendKeys(trimws(captcha_text))
提交登录
remDr$findElement(using = "css selector", value = "#loginButton")$click()
检查登录状态
if (grepl("欢迎", remDr$getPageSource())) {
cat("登录成功!\n")
} else {
cat("登录失败,验证码可能输入错误。\n")
}
关闭浏览器
remDr$close()
rD$server$stop()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异