c#爬虫-1688官网自动登录

背景

在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。

登录地址

https://login.1688.com/member/signin.htm

自动登录方法

1、找到对应的元素,账号、密码框。

2、把账号、密码值带进去。

  List<string> logininfolist = new List<string>();string file = "1688Account.json";if (!File.Exists(file)){throw new ArgumentException("1688Account  not found");}string data = File.ReadAllText(file, Encoding.UTF8);var account1688list = JsonConvert.DeserializeObject<List<Account1688Item>>(data);logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList());Random rdinfo = new Random();int indexinfo = rdinfo.Next(logininfolist.Count);var modelinfo = logininfolist[indexinfo];driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]);driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]);

3、模拟点击提交按钮操作。

     // Thread.Sleep(1000 * 30); //30时间操作driver.FindElement(By.ClassName("password-login")).Click();Thread.Sleep(1000 * 30);//30时间操作

4、进入控制台,验证是否登陆成功。并记录Cookies,下次再来的时候,直接使用现成的Cookies,一般有效期可以维持一天多左右。

  driver.Navigate().GoToUrl("https://work.1688.com/?tracelog=login_target_is_blank_1688");Thread.Sleep(1000 * 5);if (driver.Url.Contains("login.1688.com")){Console.WriteLine("登录失败");CookieHelp.DeleteCookies();Console.WriteLine("2");throw new Exception("重新登录");}driver.Navigate().Refresh();CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies);

5、判断是否有现成的登录cookies。

   driver.Navigate().GoToUrl("https://www.1688.com/");driver.Manage().Cookies.DeleteAllCookies();var listCookie = CookieHelp.GetCookie();if (listCookie != null){logintry = 0;Console.WriteLine("有现成cookies" + DateTime.UtcNow);foreach (var item in listCookie){driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry));}Thread.Sleep(2000);driver.Navigate().GoToUrl("https://work.1688.com/?tracelog=login_target_is_blank_1688");Thread.Sleep(1000 * 2);

完整代码

  /// <summary>/// 登录  todo/// </summary>/// <param name="_reptilesImageSearchService"></param>/// <param name="options"></param>/// <param name="driver"></param>public void Implement(IReptilesImageSearchService _reptilesImageSearchService, IWebDriver driver){driver.Navigate().GoToUrl("https://www.1688.com/");driver.Manage().Cookies.DeleteAllCookies();var listCookie = CookieHelp.GetCookie();if (listCookie != null){logintry = 0;Console.WriteLine("有现成cookies" + DateTime.UtcNow);foreach (var item in listCookie){driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry));}Thread.Sleep(2000);driver.Navigate().GoToUrl("https://work.1688.com/?tracelog=login_target_is_blank_1688");Thread.Sleep(1000 * 2);if (driver.Url.Contains("login.1688.com")){Console.WriteLine("cookies过期了");CookieHelp.DeleteCookies();Console.WriteLine("1");throw new Exception("重新登录");}}else{if (logintry > 4){Console.WriteLine("登陆次数超出:" + logintry);throw new Exception("登陆次数超出,退出");}logintry++;Console.WriteLine("无现成cookies" + DateTime.UtcNow);driver.Navigate().GoToUrl("https://login.1688.com/member/signin.htm");#region 登录动作driver.SwitchTo().Frame(0);IJavaScriptExecutor js = (IJavaScriptExecutor)driver;//  string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8);string returnjs = (string)js.ExecuteScript(jsfile);List<string> logininfolist = new List<string>();string file = "1688Account.json";if (!File.Exists(file)){throw new ArgumentException("1688Account  not found");}string data = File.ReadAllText(file, Encoding.UTF8);var account1688list = JsonConvert.DeserializeObject<List<Account1688Item>>(data);logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList());Random rdinfo = new Random();int indexinfo = rdinfo.Next(logininfolist.Count);var modelinfo = logininfolist[indexinfo];driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]);driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]);// Thread.Sleep(1000 * 30); //30时间操作driver.FindElement(By.ClassName("password-login")).Click();Thread.Sleep(1000 * 30);//30时间操作#endregion 登录动作driver.Navigate().GoToUrl("https://work.1688.com/?tracelog=login_target_is_blank_1688");Thread.Sleep(1000 * 5);if (driver.Url.Contains("login.1688.com")){Console.WriteLine("登录失败");CookieHelp.DeleteCookies();Console.WriteLine("2");throw new Exception("重新登录");}driver.Navigate().Refresh();CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies);}Thread.Sleep(1000);}

注意事项

1、登录的时候,有时候会出现滑块验证码,这时候一般是使用其他账号重试或者是在当前的机器手工登录一次,后面基本就会被信任。

2、使用这段代码本身就是模拟真实用户的行为,最大限度的减少验证码出现的几率。

   IJavaScriptExecutor js = (IJavaScriptExecutor)driver;//  string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8);string returnjs = (string)js.ExecuteScript(jsfile);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件

TensorRT是一个高性能的深度学习推理&#xff08;Inference&#xff09;优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytor…

做一个网站多少钱?

「一辆车子多少钱&#xff1f;一个房子多少钱&#xff1f;」 这问题在工程师或设计师的眼里就如「一辆车子多少钱&#xff1f;一个房子多少钱&#xff1f;」,这个问题实在空泛到一个让人无法言语的境界&#xff0c;这也是我最常被问到的问题「做一个网站多少钱&#xff1f;」。…

[Abp 源码分析]多租户体系与权限验证

点击上方蓝字关注我们0.简介承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的。1.多租户的概念多租户系统又被称之为 Saas &#xff0c;比如阿里云就是一个典型的多租户系统&#xff0…

生存是一种毅力

三月初回到成都,出站时还是凌晨5点多,第一次这么早站在成都的火车站,拥挤的人群和车辆,我的神志却异常的清醒,坚持不要母亲来接我. 到家洗漱后到头就睡,一觉醒来10点多,中午的成都虽不像北京那么阳光普照但也感觉暖暖的.想起在北京训练营的日子,"枯藤老树昏鸦"每天伴…

linux truncate文件,linux系统编程:用truncate调整文件大小

truncate的使用非常简单&#xff1a;int truncate(const char *path, off_t length);参数1&#xff1a;文件名参数2: 文件需要被调整的大小length 大于 文件大小&#xff0c; 文件后面会填充空白字节或者空洞length 小于 文件大小&#xff0c; 文件多出的部分&#xff0c;会被…

如何在 ASP.Net Core 中使用 SignalR

SignalR for ASP.Net Core 是 SignalR 的浴火重生版&#xff0c;允许你在 ASP.Net Core 中实现实时通讯&#xff0c;这里的 实时 意味着双方都能快速的感知对方发来的消息&#xff0c;比如&#xff1a;一旦 server 端有需要推送的内容将会直接 push 到 client&#xff0c;这和原…

搞笑动图:这些痛,只有程序员懂…

“代码上线后又追加了新特性” “在生产环境做 hotfix” “刚调稳定的系统&#xff0c;公司叕空降了一位架构师&#xff0c;叕要重构现有系统…… ” “当程序员听客户说还在用 IE 时” “当黑客拿到 root 权限之后” “代码进入循环分支后” “项目交接&#xff0c;客户要求开…

linux内核分为子系统,Linux内核内存管理子系统分析【转】

还是那张熟悉的老图&#xff1a;Linux内核子系统简介(由七个部分组成)Linux内存管理模型&#xff1a;1. 内存管子系统职能&#xff1a;1> 管理虚拟地址与物理地址的映射2> 管理物理内存的分配2. 地址映射管理1> 虚拟地址空间分布&#xff1a;linux采用的是一种虚拟地…

spss22.0统计分析从入门到精通_数据分析最全资料:SPSS/MATLAB/SQL/SAS/EXCEL经典教材+视频教程,快速入门!...

可以说当今社会数据就是力量。数据分析能力已经成为各个行业必备的技能&#xff0c;如果能熟练掌握数据分析技能&#xff0c;不管是留学申请还是以后的就业&#xff0c;都会是一个很大的加分项。但是目前国内很少有高校专门开设数据分析课程&#xff0c;想要掌握技能大部分要靠…

可反复擦写5万次的手写板,竟然还能用橡皮擦能清除屏幕!

作为一名文艺青年&#xff0c;平时写字画画是我的一大爱好。 心情不错&#xff0c;来个创作&#xff01; 还记得我们之前介绍过的Boogie Board电子手写板吗&#xff1f; 小木用的就是它。 虽然好用&#xff0c;只不过有时候不小心画错了&#xff0c;只能重新来。 伤心啊…… 不…

[Abp 源码分析]权限验证

点击上方蓝字关注我们0.简介Abp 本身集成了一套权限验证体系&#xff0c;通过 ASP.NET Core 的过滤器与 Castle 的拦截器进行拦截请求&#xff0c;并进行权限验证。在 Abp 框架内部&#xff0c;权限分为两块&#xff0c;一个是功能(Feature)&#xff0c;一个是权限项(Permissio…

cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框

当玩家购买道具的时候&#xff0c;一个个买可能会比较麻烦&#xff0c;用数字调节框的话玩家一次性就可以买好几十个了(钱够的话)。运行效果如下&#xff1a;Cocos Creator版本&#xff1a;2.2.0公号"All Codes"后台回复"数字调节框"&#xff0c;获取该项目…

为什么一流成功人士的闹钟都定在早晨5:57?

对很多人来说&#xff0c;早晨时分是一天中最匆忙的时段。近年来&#xff0c;我在研究人们如何利用时间的过程中发现&#xff0c;市场上铺天盖地的媒体教你如何利用早晨的时间。 美国国家睡眠基金会发布的一项睡眠调查结果显示&#xff0c;在工作日的早晨&#xff0c;30-50岁的…

命令行小技巧

我们平时使用Linux的时候经常遇到这样一个问题&#xff0c;举例有这样一种情况&#xff1a;执行命令 $ cp /etc/apt/sources.list /etc/apt/sources.list.bak 这里面有个问题&#xff0c;明明 /etc/apt/sources 这几个字都是一样的&#xff0c;为什么要打两遍&#xff1f;这样的…

统计学习导论_统计机器学习之扫盲导论篇

机器学习之扫盲导论篇来都来了&#xff0c;不关注一下吗&#xff1f;&#xff1f;人工智能是当下最火的词&#xff0c;而机器学习就是它的灵魂。现在超级多搞金融的人已经用到很深的机器学习模型了&#xff0c;更别提互联网企业的大佬们了&#xff0c;比如&#xff1a;(这是一篇…

[Abp 源码分析]异常处理

点击上方蓝字关注我们Abp 框架本身针对内部抛出异常进行了统一拦截&#xff0c;并且针对不同的异常也会采取不同的处理策略。在 Abp 当中主要提供了以下几种异常类型&#xff1a;异常类型描述AbpExceptionAbp 框架定义的基本异常类型&#xff0c;Abp 所有内部定义的异常类型都继…

phpstorm设置 打开文件所在目录_PDF文件在线分享并设置打开次数

公司有一些重要的PDF文档&#xff0c;怎么才能防止外泄&#xff1f;如何加密PDF文件防止被人复制了&#xff1f;怎样让PDF不能被别人拷贝啊&#xff1f; 这些问题困扰了一部分想让别人看pdf内容又担心别人泄露的人。本文用maipdf网站的例子来进行设置。首先我们打开maipdf的网站…

荐号 | 11个人工智能与大数据相关的个人、企业优质号

AlphaGo Zero都会自学了&#xff0c;作为刚刚步入AI大门的我们&#xff0c;应该如何选择合适自己的知识平台呢&#xff1f;今天小编为你甄选了几个高质量的技术公众号。 这些号更多的不是讲授枯燥的理论&#xff0c;而是从行业资讯、一线技术、应用案例、职场发展等多个角度分享…

以表达式作为参数传入SQL的存储过程中去

在开发过程中&#xff0c;需要把一句Sql 的expression作为一个参数传入Procedure中去。 在asp.net中&#xff0c;一个Search的动作&#xff0c;把用户所操作的搜索条件写成了一句表达式&#xff0c;现只需要把这句表达式传入存储过程中去&#xff0c;与存储过程中的Sql的Select…

围棋中的数学原理

围棋一向被誉为是人类大脑智慧的专利&#xff0c;围棋的走法&#xff0c;几乎和宇宙中原子数量相同&#xff0c;甚至更多&#xff0c;每回合有250种可能&#xff0c;一盘棋可以长达150个回合&#xff0c;共有1后面再加360个0种下法&#xff0c;这样的计算量&#xff0c;对计算机…