selenium和puppeteer对阿里滑块验证进行操作和记录。

这篇具有很好参考价值的文章主要介绍了selenium和puppeteer对阿里滑块验证进行操作和记录。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种:selenium进行操作。

  1. 使用自带滑动和按键进行拖拽,会被检测到。大部分屏蔽方式加上也是过不去的。
  2. 使用selenium中driver的execute_script,Js注入操作。(不通过,不过这段代码在浏览器可正常操作)
    js1 = "var slider = document.getElementById('nc_1_n1z'),container = slider.parentNode;  " \
          "var rect = slider.getBoundingClientRect(),x0= rect.x || rect.left,y0= rect.y || rect.top,w = container.getBoundingClientRect().width,x1= x0 + w,y1= y0; " \
          "var mousedown = document.createEvent('MouseEvents'); mousedown.initMouseEvent('mousedown', true, true, window, 0, x0, y0, x0, y0, false, false, false, false, 0, null);slider.dispatchEvent(mousedown);" \
          "var mousemove = document.createEvent('MouseEvents'); mousemove.initMouseEvent('mousemove', true, true, window, 0, x1, y1, x1, y1, false, false, false, false, 0, null); slider.dispatchEvent(mousemove);"
    driver.execute_script(js1)
  1. Windows可以用win32api 方式进行滑动。(可通过,局限比较大,点击代码自取)
  2. Pyautogui 可以在mac和windows进行。(服务器就不可用,点击代码自取)

第二种:puppeteer

  1. 直接使用puppeteer模块进行操作访问和存储,要比selemium几率大一些,但是还是很难通过。百分之10-20的概率。
const puppeteer = require('puppeteer');
const fs = require('fs');

function update(url) {
(async () => {
    // const browser = await puppeteer.launch();
    const browser = await puppeteer.launch({
        headless: true,slowMo: 150,
    args:['--window-size=1920,1080'],
    executablePath: '/Applications/Google Chrome.app/Contentas/MacOS/Google Chrome'
    })//   启动浏览器,传入headless为false可以打开窗口

    // //启动新页面
    const page = await browser.newPage();
    // //设置页面打开时的页面宽度高度


    await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3477.0 Safari/537.36");
    await page.setExtraHTTPHeaders({
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  'Accept-Language': 'zh-CN,zh;q=0.9',
  'Cache-Control': 'max-age=0',
  'Connection': 'keep-alive',
  'Sec-Fetch-Dest': 'document',
  'Sec-Fetch-Mode': 'navigate',
  'Sec-Fetch-Site': 'same-origin',
  'Sec-Fetch-User': '?1',
  'Upgrade-Insecure-Requests': '1',});
    //直接删掉webdriver属性
    await page.evaluateOnNewDocument(() => {
        const newProto = navigator.__proto__;
        delete newProto.webdriver;
        navigator.__proto__ = newProto;
    });
    //defineProperty删除webdriver后如何检测
    await page.evaluateOnNewDocument(() => {
        Object.defineProperty(navigator, 'webdriver', {
            get: () => false,
        });
    });
    await page.evaluateOnNewDocument(() => {
		   get: () => "Linux x86_64"
		});
    //防止检测,赋值plugins
    await page.evaluateOnNewDocument(() => {
        Object.defineProperty(navigator, 'plugins', {
            get: () => [
                {
                    0: {type: "application/x-google-chrome-pdf", suffixes: "pdf", description: "Portable Document Format", enabledPlugin: Plugin},
                    description: "Portable Document Format",
                    filename: "internal-pdf-viewer",
                    length: 1,
                    name: "Chrome PDF Plugin"
                },
                {
                    0: {type: "application/pdf", suffixes: "pdf", description: "", enabledPlugin: Plugin},
                    description: "",
                    filename: "mhjfbmdgcfjbbpaeojofohoefgiehjai",
                    length: 1,
                    name: "Chrome PDF Viewer"
                },
                {
                    0: {type: "application/x-nacl", suffixes: "", description: "Native Client Executable", enabledPlugin: Plugin},
                    1: {type: "application/x-pnacl", suffixes: "", description: "Portable Native Client Executable", enabledPlugin: Plugin},
                    description: "",
                    filename: "internal-nacl-plugin",
                    length: 2,
                    name: "Native Client"
                }
            ],
        });
    });
    //window.chrome绕开
    await page.evaluateOnNewDocument(() => {
        window.chrome = {
            runtime: {},
            loadTimes: function() {},
            csi: function() {},
            app: {}
        };
    });
    //早期绕开方式
    function hasChrome() {
        return !navigator.language || !navigator.languages
    };
    function hasChrome() {
        return !! window.chrome
    };

  await page.goto(url);
  await page.waitForTimeout(5000)
  await page.evaluate(
        // setTimeout(
            function() {
                var slider = document.getElementById('nc_1_n1z'), container = slider.parentNode;
                var rect = slider.getBoundingClientRect(), x0 = rect.x || rect.left, y0 = rect.y || rect.top,
                    w = container.getBoundingClientRect().width, x1 = x0 + w, y1 = y0;
                var mousedown = document.createEvent("MouseEvents");
                mousedown.initMouseEvent("mousedown", true, true, window, 0,
                    x0, y0, x0, y0, false, false, false, false, 0, null);
                slider.dispatchEvent(mousedown);

                var mousemove = document.createEvent("MouseEvents");
                mousemove.initMouseEvent("mousemove", true, true, window, 0,
                    x1, y1, x1, y1, false, false, false, false, 0, null);
                slider.dispatchEvent(mousemove);
// }, 3000)

            });
  await page.waitForTimeout(5000)
  //page.frames() 获取当前页面所有的 iframe,然后根据 iframe 的名字精确获取某个想要的 iframe
  const frame = await page.mainFrame();
  const bodyHandle = await frame.$('html');   //获取所有的html
  //frame.evaluate()在浏览器中执行函数,相当于在控制台中执行函数,返回一个Promise
  const html = await frame.evaluate(body=>body.innerHTML,bodyHandle);
  await bodyHandle.dispose();

  /* fs.wirteFile有三个参数
   * 1,第一个参数是要写入的文件路径
   * 2,第二个参数是要写入得内容
   * 3,第三个参数是可选参数,表示要写入的文件编码格式,一般就不写,默认就行
   * 4,第四个参数是个回调函数  只有一个参数error,来判断是否写入成功
   */
    browser.close();
    fs.writeFile("a.html",html,error=>{
    if(error) return console.log("写入文件失败,原因是:"+error.message);
    console.log('写入成功');

    // process.kill(browser.process().pid);

});
})();
};

update('https://www.123456789.com')//网站需要自己找下,如果用python调用会报错。

文章来源地址https://www.toymoban.com/news/detail-607023.html

到了这里,关于selenium和puppeteer对阿里滑块验证进行操作和记录。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用selenium解决滑块验证码

    因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧。这篇博客主要是用selenium解决滑块验证码的个别案列。 思路: 用selenium打开浏览器指定网站 将残缺块图片和背景图片下载到本地 对比两张图片的相似地方,计算要滑动的距离 规划路线,移动

    2024年02月01日
    浏览(43)
  • 阿里云新用户滑块验证不过,阿里云滑动验证流程及线上问题排查

    滑动验证是阿里巴巴集团提供的一种验证码解决方案,采用风险分析引擎,有效区分来自人类与机器人的访问行为并拦截机器风险,为您提供安全可靠的业务环境。 下图是滑动验证在用户客户端的展示效果。 产品介绍:阿里云验证码(Alibaba Captcha) 滑动验证流程 滑动验证服

    2024年01月17日
    浏览(41)
  • python+selenium尝试处理滑块验证

     效果如图:   处理思路: 1.打开滑动验证页面,这个用selenium一步一步走过去 2.将滑动验证码的整个图片保存下来 3.对图片的像素点进行分析,发现拼图处像素特征如下:   1).阴影起点处rgb的第一个值为0   2).阴影处的rgb三个值相加大部分小于某个临界值(minPix=400)   3).拼图阴影大

    2024年02月15日
    浏览(46)
  • 用Selenium实现滑块验证码登录

    现在很多网站的登录,都采用了拖动图片滑块的验证码方式来进行验证登录,比如哔哩哔哩和京东等。在使用爬虫等自动化程序时,如何通过滑块验证,就成了需要解决的问题。 这里通过大名鼎鼎的ddddocr图片识别库,和模拟浏览器操作的selenium库来实现 安装浏览器driver 首先

    2024年01月22日
    浏览(39)
  • 使用selenium解决滑块验证的问题

    使用自动化测试时有些网站会使用滑块来阻止,所以如何解决滑块问题已经成为自动化测试不可或缺的,今天以网易易盾网站的滑块举例:https://dun.163.com/trial/sense 要解决滑块问题的关键就是匹配滑块在背景图中的位置所以使用python中的numpy库来实现获取滑块在背景的坐标,获

    2024年02月12日
    浏览(33)
  • 使用selenium模拟登录解决滑块验证问题

    目录 1.登录入口 2.点击“账号密码登录” 3.输入账号、密码并点击登录 4.滑块验证过程 5.小结 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟请求,需要的参数太多了

    2024年02月16日
    浏览(38)
  • selenium+opencv实现模拟登陆(滑块验证码)

    很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常受到阻碍,想着用opencv的模板匹配试试能不能实现模拟登陆。本来觉得网上资料多应该还蛮容易,但实际上手还是搞了蛮久,在这里记录一下整个流程,网站无所谓主要是要有滑动验证码:

    2023年04月14日
    浏览(39)
  • python+selenium绕过滑块验证,实现自动登录

    实现taobao自动化登录,当用webdriver打开淘宝时,滑块验证一直失败,手动滑都会失败。因为淘宝会检测window.navigator.webdriver,控件检测到你是selenium进入,所以就会弹出滑块验证。只需要绕过检测就能实现自动登录 验证了两种方法可以跳过: 第一种是给浏览器加启动参数,开

    2024年02月12日
    浏览(48)
  • Selenium解决滑块验证问题:自动化与技巧

    滑块验证是一种常见的人机验证机制,用于识别和防止自动化程序的访问。在爬虫和自动化测试中,我们经常面临需要处理滑块验证的情况。本文将介绍如何使用 Selenium 库处理滑块验证问题。 一、安装 Selenium 首先,确保你已经安装了 Selenium。你可以使用以下命令通过 pip 安

    2024年01月25日
    浏览(51)
  • 抖音、云图、星图、巨量等滑块验证(python+selenium)

    抖音、云图、星图、巨量等滑块通用 2023年3月份亲测好用,仅用于学习测试。

    2024年02月10日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包