Selenium中实现C#滑块登录

最近要制作演示脚本,使用c#版的Selenium,遇到ClickAndHold左键点击不松开,滑动滑块验证

1、首先是使用谷歌浏览器插件Selenium IDE录制功能,录制滑块滑动验证登录,

然后导出成c#代码,如下

// Generated by Selenium IDE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using Xunit;
public class SuiteTests : IDisposable {
  public IWebDriver driver {get; private set;}
  public IDictionary<String, Object> vars {get; private set;}
  public IJavaScriptExecutor js {get; private set;}
  public SuiteTests()
  {
    driver = new ChromeDriver();
    js = (IJavaScriptExecutor)driver;
    vars = new Dictionary<String, Object>();
  }
  public void Dispose()
  {
    driver.Quit();
  }
  [Fact]
  public void 22() {
    driver.Navigate().GoToUrl("http://172.16.100.87:8031/index.jssp");
    driver.Manage().Window.Size = new System.Drawing.Size(952, 1012);
    driver.FindElement(By.Id("inp_user")).Click();
    driver.FindElement(By.Id("inp_user")).SendKeys("yzsthjj2022");
    driver.FindElement(By.Id("inp_pass")).Click();
    driver.FindElement(By.Id("inp_pass")).SendKeys("ddzx0524");
    {
      var element = driver.FindElement(By.CssSelector(".slider-btn"));
      Actions builder = new Actions(driver);
      builder.MoveToElement(element).ClickAndHold().Perform();
    }
    {
      var element = driver.FindElement(By.CssSelector(".slider-text"));
      Actions builder = new Actions(driver);
      builder.MoveToElement(element).Perform();
    }
    {
      var element = driver.FindElement(By.CssSelector(".slider-text"));
      Actions builder = new Actions(driver);
      builder.MoveToElement(element).Release().Perform();
    }

    driver.FindElement(By.CssSelector(".slider-btn")).Click();
    driver.FindElement(By.Id("btn_ok")).Click();
    driver.FindElement(By.CssSelector("body")).Click();
  }
}

2、但是转成到vs中,运行,滑动效果时而好,时而不行 ,代码如下:

 /// <summary>
        /// 打开页面
        /// </summary>
        private void OpenPage(string url)
        {
            _driver.Navigate().GoToUrl(url);
            Thread.Sleep(1000);

            //用户名
            _driver.FindElement(By.CssSelector("#inp_user")).SendKeys("yzsthjj2022");
            //密码
            _driver.FindElement(By.CssSelector("#inp_pass")).SendKeys("ddzx0524");

            {
                //滑动
                IWebElement element = _driver.FindElement(By.CssSelector(".slider-btn"));
                Actions builder = new Actions(_driver);
                builder.MoveToElement(element).ClickAndHold().MoveByOffset(291, 0).Release().Perform();//最开始没有加MoveByOffset,所以滑块只滑动了一半就返回了
            }

            //{
            //    var element = _driver.FindElement(By.CssSelector(".slider-text"));
            //    Actions builder = new Actions(_driver);
            //    builder.MoveToElement(element).Perform();
            //}

            //{
            //    var element = _driver.FindElement(By.CssSelector(".slider-text"));
            //    Actions builder = new Actions(_driver);
            //    builder.MoveToElement(element).Release().Perform();
            //}

            Thread.Sleep(1000);
            //_driver.ExecuteJavaScript("alert('123')");
            _driver.FindElement(By.CssSelector(".slider-btn")).Click();

            //点击鼠标
            //_driver.FindElement(By.CssSelector("body")).Click();
            var el_move = _driver.FindElement(By.CssSelector("body > div > div:nth-child(1) > div"));
            new Actions(_driver).MoveToElement(el_move).Click().Perform();
            //var el_move = _driver.FindElement(By.CssSelector("body"));
            //el_move.Click();

            //_driver.ExecuteJavaScript("alert('开始点击登录')");
            Thread.Sleep(1000);
            _driver.FindElement(By.CssSelector("#btn_ok")).Click();

            //_driver.ExecuteJavaScript("alert('点击登录完毕')");

            Thread.Sleep(1000);
        }

  builder.MoveToElement(element).ClickAndHold().MoveByOffset(291, 0).Release().Perform();

 最开始没有加MoveByOffset,所以滑块只滑动了一半就返回了,导致验证失败
 

 这里有个小技巧

这个移动的坐标值是在浏览器里直接拖动到末尾,html显示出来的,直接可以使用,不用自己计算了(按F12,右键滑动定位到F12打开的控制台里的元素

以上即可实现,另外之前也使用过 DrapAndDrop(左键点击不松开拖动)功能,也是有问题,估计MoveByOffset(X, Y)这种方式可以解决,大家可以尝试下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以看出这篇文章介绍了如何使用纯JS非Selenium的方式爆破京东滑块验证码,并没有提供如何使用Selenium登录京东并去除滑块的方法。不过,可以提供以下步骤来使用Selenium登录京东并去除滑块: 1. 安装Selenium库和对应的浏览器驱动(如ChromeDriver)。 2. 导入Selenium库和其他需要的库。 3. 创建一个浏览器对象,打开京东登录页面。 4. 使用Selenium模拟用户输入账号密码并点击登录按钮。 5. 判断是否出现滑块验证码,如果有则模拟拖动滑块,否则直接登录成功。 6. 关闭浏览器。 以下是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time # 创建浏览器对象 browser = webdriver.Chrome() # 打开京东登录页面 browser.get('https://passport.jd.com/new/login.aspx') # 输入账号密码并点击登录按钮 browser.find_element_by_id('loginname').send_keys('your_username') browser.find_element_by_id('nloginpwd').send_keys('your_password') browser.find_element_by_id('loginsubmit').click() # 判断是否出现滑块验证码 if 'slide' in browser.page_source: # 获取滑块元素 slider = browser.find_element_by_class_name('JDJRV-slide-inner') # 模拟拖动滑块 ActionChains(browser).click_and_hold(slider).perform() ActionChains(browser).move_by_offset(258, 0).perform() time.sleep(0.5) ActionChains(browser).release().perform() # 登录成功,可以进行后续操作 # ... # 关闭浏览器 browser.quit() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值