如何成功绕过极验滑动验证码

在网络爬虫和自动化工具的开发中,极验滑动验证码是一个常见的挑战。它旨在保护网站免受恶意爬虫和自动机器人的攻击,但在某些情况下,我们需要绕过它。在本文中,我们将深入探讨如何使用Python和Selenium库来绕过极验滑动验证码,以确保您的自动化任务能够继续执行。

1. 获取验证码图片
要绕过极验滑动验证码,首先需要获取验证码图片。极验滑动验证码通常包括两部分:一张包含完整图像的背景图片,以及一张带有滑块的前景图片。我们将使用Selenium来模拟浏览器操作,获取这两张图片。

获取完整图片
首先,我们需要获取包含完整背景的图片。这可以通过以下步骤完成:


def get_full_image(self):
    full_image = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_fullbg')))
    location = full_image.location
    size = full_image.size
    left = location['x']
    top = location['y']
    right = left + size['width']
    bottom = top + size['height']

    screenshot = self.get_screenshot()
    full_image = screenshot.crop((left, top, right, bottom))
    return full_image
获取带滑块的图片
接下来,我们模拟点击滑块,使包含滑块的图片出现:
def click_and_get_slider_image(self):
    slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))
    slider.click()
    time.sleep(1)  # 为滑块加载一些时间

    slider_image = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_slice')))
    location = slider_image.location
    size = slider_image.size
    left = location['x']
    top = location['y']
    right = left + size['width']
    bottom = top + size['height']

    screenshot = self.get_screenshot()
    slider_image = screenshot.crop((left, top, right, bottom))
    return slider_image
现在我们已经成功获取了两张图片,接下来我们将比较它们以确定滑块的位置。

2. 识别缺口位置
为了识别滑块的位置,我们需要比较这两张图片,找出它们之间的差异。具体来说,我们将逐像素点比较这两张图片,一旦发现不同的像素点,我们就找到了滑块的位置。以下是相关代码示例:


def is_pixel_different(self, image1, image2, x, y):
    """
    判断两个像素点是否不同
    :param image1: 图片1
    :param image2: 图片2
    :param x: x坐标
    :param y: y坐标
    :return: 是否不同
    """
    pixel1 = image1.load()[x, y]
    pixel2 = image2.load()[x, y]
    threshold = 60  # 阈值,用于确定像素是否不同

    if abs(pixel1[0] - pixel2[0]) > threshold or abs(pixel1[1] - pixel2[1]) > threshold or abs(pixel1[2] - pixel2[2]) > threshold:
        return True

    return False
我们会比较这两张图片的每个像素点,一旦发现不同的像素点,即可确定滑块的位置。

3. 模拟滑块拖动
一旦我们确定了滑块的位置,下一步就是模拟滑块的拖动。要模拟滑块的拖动,我们需要计算出一个移动轨迹,使滑块以匀速移动的方式越过缺口。

def move_slider(self, track):
    slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))
    ActionChains(self.driver).click_and_hold(slider).perform()
    
    for x in track:
        ActionChains(self.driver).move_by_offset(xoffset=x, yoffset=0).perform()
    
    time.sleep(0.5)  # 等待滑块移动完成
    ActionChains(self.driver).release().perform()
上述代码演示了如何使用Selenium模拟滑块的拖动。我们根据计算出的轨迹依次移动滑块,最终完成验证。

4. 整体实现
综合以上步骤,以下是一个完整的示例:

if __name__ == '__main__':
    slider_cracker = SliderCracker()
    slider_cracker.open_target_website()
    full_image = slider_cracker.get_full_image()
    slider_image = slider_cracker.click_and_get_slider_image()
    diff_x = slider_cracker.find_slider_gap(full_image, slider_image)
    track = slider_cracker.get_move_track(diff_x)
    slider_cracker.move_slider(track)
这个示例演示了如何打开目标网站,获取验证码图片,识别滑块的位置,计算移动轨迹,并模拟滑块拖动。

通过这些步骤,您可以成功绕过极验滑动验证码,确保您的爬虫或自动化工具能够正常工作。但请注意,网站可能会不断更新验证码机制,因此在实际应用中需要不断调整和优化这些方法。

这篇文章涵盖了绕过极验滑动验证码的主要步骤,希望对您有所帮助。如果您有任何问题或需要更多详细信息,请随时提问。

如果上述代码遇到问题或已更新无法使用等情况可以联系Q:1436423940或直接访问www.ttocr.com测试对接(免费得哈)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 Java 图片滑动验证码的示例代码,使用 Java Swing 库实现: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Random; public class ImageSliderVerificationCode extends JFrame { private static final long serialVersionUID = 1L; private final int WIDTH = 400; private final int HEIGHT = 300; private final int BLOCK_SIZE = 50; private Image bgImage; private Image blockImage; private int blockX; private int blockY; private int mouseX; private int mouseY; private boolean isDragging; public ImageSliderVerificationCode() { setTitle("Image Slider Verification Code"); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setLocationRelativeTo(null); bgImage = new ImageIcon("background.jpg").getImage(); blockImage = new ImageIcon("block.png").getImage(); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.getX() >= blockX && e.getX() <= blockX + BLOCK_SIZE && e.getY() >= blockY && e.getY() <= blockY + BLOCK_SIZE) { isDragging = true; mouseX = e.getX(); mouseY = e.getY(); } } public void mouseReleased(MouseEvent e) { isDragging = false; if (blockX >= WIDTH - BLOCK_SIZE) { JOptionPane.showMessageDialog(null, "Verification passed!"); System.exit(0); } else { blockX = 0; blockY = new Random().nextInt(HEIGHT - BLOCK_SIZE); repaint(); } } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if (isDragging) { blockX += e.getX() - mouseX; blockY += e.getY() - mouseY; if (blockX < 0) { blockX = 0; } if (blockX > WIDTH - BLOCK_SIZE) { blockX = WIDTH - BLOCK_SIZE; } if (blockY < 0) { blockY = 0; } if (blockY > HEIGHT - BLOCK_SIZE) { blockY = HEIGHT - BLOCK_SIZE; } mouseX = e.getX(); mouseY = e.getY(); repaint(); } } }); } public void paint(Graphics g) { g.drawImage(bgImage, 0, 0, null); g.drawImage(blockImage, blockX, blockY, null); } public static void main(String[] args) { ImageSliderVerificationCode verCode = new ImageSliderVerificationCode(); verCode.setVisible(true); } } ``` 此代码将生成一个包含背景图片和滑块图片的窗口。当用户按住滑块图片并拖动它时,窗口将显示移动后的滑块图片。如果用户将滑块图片拖动到窗口的右边缘,则显示验证通过的消息并退出程序。否则,滑块图片将被重置到窗口的左侧,并随机在窗口的垂直方向上移动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值