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…

linux网卡驱动 pdf,Linux下网卡驱动程序.pdf

zekairecv 于 2015-10-04 00:58:57发表:谢谢weilee1 于 2015-04-19 17:41:05发表:看看雪语阑风 于 2014-12-04 11:03:39发表:楼主好人Doctor易 于 2014-10-08 13:06:25发表:也不说网卡型号吗wzj3521787 于 2014-09-12 11:12:10发表:这是指网卡驱动编程还是编译lcdstrongman_hw …

python数学计算_初学者Python学习笔记--数学计算

四则运算 加减乘除 1 2 3 10 - 6 4 5 * 5 25 20 / 5 4.0 3 ** 3 27 取整计算 13//3 4 取余数计算 13%3 1 计算顺序&#xff0c;括号>乘除>加减 4 5 - (36) * 2 -9 特殊赋值&#xff0c;可以用_来分割数字&#xff0c;简便识别 num 111_222_333 num 111222333 四舍五入…

做一个网站多少钱?

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

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

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

python中csv文件把成绩加入_【学习笔记】python3中csv文件使用

1. readercsv.reader(f, delimiter,)&#xff1a;按行读取数据&#xff0c;reader为生成器&#xff0c;读取的每行数据为列表格式&#xff0c;可以通过delimiter参数指定分隔符。import csvwith open(data.csv, encodingutf-8) as f:reader csv.reader(f)header next(reader)…

生存是一种毅力

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

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

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

python数据分析与展示 pdf课件_python数据分析与展示 课件 相关实例(示例源码)下载 - 好例子网...

开发语言&#xff1a;Python | 大小&#xff1a;9.84KB | 发布时间&#xff1a;2020-05-13 | 立即下载 开发语言&#xff1a;Python | 大小&#xff1a;0.24M | 发布时间&#xff1a;2019-09-09 | 立即下载 开发语言&#xff1a;Python | 大小&#xff1a;0.15M | 发布时间&…

如何在 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;客户要求开…

python中闭包不是立刻执行_一道神奇的Python面试题,你会吗?

无意间&#xff0c;看到这么一道Python面试题&#xff1a;以下代码将输出什么&#xff1f;def testFun():temp [lambda x : i*x for i in range(4)]return tempfor everyLambda in testFun():print (everyLambda(2))脑中默默一想&#xff0c;这还用说么&#xff0c;肯定是&…

.net 中通用的formatstring格式符整理

格式化日期和数字的字符串经常要用到这个, 就把帮助里面的东西大概整理了一些列在这里了. 下表描述了用来格式化 DateTime 对象的标准格式说明符。 格式说明符名称说明d短日期模式显示由与当前线程关联的 DateTimeFormatInfo.ShortDatePattern 属性定义的模式或者由指定格式提供…

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

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

python打包成安装包_把 python 程序打包成 egg 或者 whl 安装包

1.1 安装setuptools 首先要安装setuptools工具。Debian/Ubuntu下可以直接使用apt安装&#xff1a; $ sudo apt-get install python-setuptools 或者通过pip安装&#xff1a; $ pip install setuptools 更新setuptools&#xff1a; $ pip install --upgrade setuptools 或者下载…

关于C#事件处理函数中的参数(object sender, EventArgs e)

1、是事件源&#xff0c;表示触发事件的那个组件 如(button/label/listview...)&#xff0c;比如说你单击button&#xff0c;那么sender就是button2、EventArgs是事件参数&#xff0c;它用来辅助你处理事件比如说你用鼠标点击窗体&#xff0c;那么EventArgs是会包含点击的位置…

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

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

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

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

普通用户杜绝不请自来的邮件对策

1、给自己的信箱起个“复杂用户名”:许多人习惯用自己姓名的拼音作为用户名&#xff0c;但一般过于简单&#xff0c;这样被垃圾邮件制造者捕捉到的机率很高。因此在申请邮箱时&#xff0c;不妨起个保护性强一点的用户名&#xff0c;比如英文和数字的组合&#xff0c;尽量长一点…

[Abp 源码分析]权限验证

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