c#爬虫-使用ChromeDriver 所见即所得

问题

最近在做爬虫的时候发现很多网页都是浏览器看得见,但是源文件是看不到的,也就是所谓的异步加载。这时候如果我们需要那些异步内容,要么是了解他的规则,进行条件的组合进而再次进行http请求,得到数据;这种方式有时候遇到逻辑复杂的就比较不好处理。这时候ChromeDriver就派上用场了。

办法

下面我们来看下这个例子

爬取腾讯视频,获取电视剧或电影链接。

浏览器是这样的查看文件是这样的,压根没有视频地址

使用ChromeOptions模拟用户行为

   ChromeOptions options = new ChromeOptions();options.AddArguments("--test-type", "--ignore-certificate-errors");options.AddArguments("user-agent=mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1");options.AddArgument("enable-automation");//   options.AddArgument("headless");//  options.AddArguments("--proxy-server=http://user:password@yourProxyServer.com:8080");//  IWebDriver driver = new ChromeDriver(System.Environment.CurrentDirectory, options);//chromeDriverService  System.Environment.CurrentDirectory   System.Environment.CurrentDirectoryusing (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(@"C:\Users\Administrator\Downloads\chromedriver_win32", options, TimeSpan.FromSeconds(120))){// trylogin(driver);driver.Url = "http://v.qq.com/iframe/player.html?tiny=1&auto=0&vid=z0023uikqoj";//tenvideo_video_player_0SetText(driver.PageSource);Thread.Sleep(200);try{for (int a = 1; a < 2; a++){SetText("\r\n第" + a.ToString() + "个");driver.Navigate().GoToUrl("https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=cbuimgsearch/eWXC7XHHPN1607529600000&spm=");//登录if (driver.Url.Contains("login.1688.com")){SetText("\r\n需要登录,开始尝试...");trylogin(driver); //尝试登录完成//再试试driver.Navigate().GoToUrl("https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=cbuimgsearch/eWXC7XHHPN1607529600000&spm=");if (driver.Url.Contains("login.1688.com")){//没办法退出SetText("\r\n退出,换ip重试...");return;}}//鼠标放上去的内容因为页面自带只能显示一个的原因 没办法做到全部显示 然后在下载 只能是其他方式下载//  var elements = document.getElementsByClassName('hover-container');//  Array.prototype.forEach.call(elements, function(element) {//  element.style.display = "block";//   console.log(element);//  });IJavaScriptExecutor js = (IJavaScriptExecutor)driver;var sss = js.ExecuteScript(" var elements = document.getElementsByClassName('hover-container');  Array.prototype.forEach.call(elements, function(element) {  console.log(element); element.setAttribute(\"class\", \"测试title\");  element.style.display = \"block\";  console.log(element); });");Thread.Sleep(500);var responseModel = Write(driver.PageSource, Pagetypeenum.列表);Thread.Sleep(500);int i = 1;foreach (var offer in responseModel?.data?.offerList ?? new List<OfferItemModel>()){driver.Navigate().GoToUrl(offer.information.detailUrl);string responseDatadetail = driver.PageSource;Write(driver.PageSource, Pagetypeenum.详情);SetText("\r\n第" + a.ToString() + "-" + i.ToString() + "个");Thread.Sleep(500);i++;}}}catch (Exception ex){CloseChromeDriver(driver);throw;}}// Thread thread = new Thread(go);//  thread.Start();}

得到网页信息SetText(driver.PageSource);

   private void button2_Click(object sender, EventArgs e){//文件路径string filePath = @"G:\conan\reptiles1688\bin\Debug\test.txt";using (FileStream fsRead = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){int fsLen = (int)fsRead.Length;byte[] heByte = new byte[fsLen];fsRead.Read(heByte, 0, heByte.Length);string myStr = System.Text.Encoding.Default.GetString(heByte);this.textBox1.Text = myStr;///读取}HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();doc.LoadHtml(this.textBox1.Text);HtmlNode node = doc.GetElementbyId("tenvideo_video_player_0");textBox1.Text = node.Attributes["src"].Value;//  var node = doc.DocumentNode.SelectNodes("//video[@id='tenvideo_video_player_0']//video");// textBox1.Text = (node[3].InnerHtml);}}

解析得到我们想到的视频地址。

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

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

相关文章

使用Ext.grid.Panel显示远程数据

使用Ext.grid.Panel显示远程数据 对于Ext.grid.Panel而言&#xff0c;它只是负责显示Store数组中心的数据&#xff0c;至于Store保存的数据到底是浏览器本地数据&#xff0c;还是远程服务器的数据&#xff0c;Ext.grid.Panel并不关心。因此&#xff0c;使用Ext.grid.Panel显示远…

4-8岁那些最难的数学概念,美国老师用一套绘本让孩子秒懂

▲数据汪特别推荐点击上图进入玩酷屋在美国&#xff0c;有不少数学故事类的绘本&#xff0c;小木今天推荐的这套《Math is categorical》就经常被美国老师用于课堂的教学&#xff0c;亚马逊的评价也是接近5星的好评。下面这个5星评价就是来自于一位美国老师&#xff0c;她就说学…

WPF 读取Docx文件并显示(附下载链接)

在wpf中直接显示Docx文件 &#xff0c;直接看看效果吧&#xff1a;下面直接看代码&#xff0c;添加主要有两个类&#xff1a;DocxReader类&#xff1a;using System; using System.IO; using System.IO.Packaging; using System.Xml;namespace WpfEmbeddedDocx {class DocxRead…

李国庆离开当当,广东消委会告长隆,智能校服提供定位功能,全球首个5G火车站来了,这就是今天的大新闻...

今天是2月21日农历正月十七今天下雨 出门忘带雨伞但是心情还是美丽的因为我没被淋湿下面是今天的大新闻李国庆宣布离开一手创办的当当 &#xff08;界面新闻&#xff09;2月20日上午&#xff0c;当当联合创始人李国庆正式宣布&#xff0c;将离开自己一手创办并为之奋斗19年的…

Source Generators(源代码生成器)的调试器支持 | Visual Studio 2019(16.10)新功能试用...

开始之前Source Generators旨在启用编译时间元编程&#xff0c;即可以在编译时间创建并添加到编译中的代码。首先用一个Demo为不了解Source Generators的朋友演示一下功能。Source Generators详细说明请参看Source Generators Cookbook[1]创建一个ClassLibrary1项目&#xff08…

程序猿专属成语 get√

全世界只有3.14 % 的人关注了数据与算法之美成语简直是中华文化底蕴一大精华&#xff0c;当程序员和成语联系上了&#xff0c;就有了下面这些火的不行的新兴成语。你还知道哪些关于程序猿的成语&#xff0c;欢迎留言分享。版权归原作者所有&#xff0c;转载仅供学习使用&#x…

哼!看你能坚持多久

21在行为心理学中&#xff0c;人们把一个人的新习惯或理念的形成并得以巩固至少需要21天的现象&#xff0c;称之为21天效应。今天一数&#xff0c;好巧&#xff01;居然我的公众号已经连续发布了21天&#xff08;本文是第22天&#xff09;。仅以此文记录第21天&#xff0c;与大…

.NET 6 新特性 Parallel ForEachAsync

.NET 6 新特性 Parallel ForEachAsyncIntro在 .NET 6 中有一个 API Parallel.ForEachAsync 在官方的博客中一直被忽略&#xff0c;但是我觉得这个 API 非常的实用&#xff0c;类似于同步版本的 Parallel.ForEach&#xff0c;可以比较高效地控制多个异步任务的并行度。之前的版本…

住宅按套内面积算,医院人脸识别黄牛,DNA碱基对可能会扩充,菜鸟发布供应链系统,猪瘟不影响食品安全,这就是今天的大新闻...

今天是2月23日农历正月十九今天的我瑟瑟发抖真想要打火锅下面是今天的大新闻住建部新规&#xff1a;住宅按套内面积算&#xff08;中国新闻网&#xff09;“住宅建筑应以套内使用面积进行交易。”住房和城乡建设部公布的一项新规征求意见稿显示&#xff0c;房地产交易将正式告别…

mac中的放置java类库扩展的位置

2019独角兽企业重金招聘Python工程师标准>>> /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/lib/ext 转载于:https://my.oschina.net/zhangdapeng89/blog/110538

WPF实现用户头像裁剪

WPF开发者QQ群&#xff1a; 340500857 前言需要做一个用户选择头像并进行裁剪。欢迎转发、分享、点赞&#xff0c;谢谢大家~。 效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;一、MainWindow.xaml代码如下&#xff1a;<Grid><Border x:Name&qu…

php5.2 zengd,大对杀狗狗再犯低级错误 ZEN狂输200目笑翻棋友

弈城围棋讯 4月29日&#xff0c;DEEPZEN仍然不知疲倦的在弈城迎战各路高手。总体来讲&#xff0c;“狗狗”战绩非常优秀&#xff0c;截止今天凌晨为止&#xff0c;它的战绩为254胜43负&#xff0c;胜率为85.5%&#xff0c;强悍的一塌糊涂&#xff0c;但是&#xff0c;“狗狗”也…

专为小机械迷而造,培养STEM思维,千万别错过!物理机械力学知识边玩边学,5岁以上请入手...

▲数据汪特别推荐点击上图进入玩酷屋自从美国前总统奥巴马先生上任后对STEM教育理念重视提升到新的层次&#xff0c;全球掀起了一波又一波的STEM教育狂潮。北上广深等中小学开设STEM课程。全国《义务教育小学科学课程标准》加强综合科技知识项目&#xff0c;将力学类科技知识学…

fusioncharts同一页面显示2个仪表盘,且以java字符串作为xml数据

为什么80%的码农都做不了架构师&#xff1f;>>> fusioncharts同一页面显示2个仪表盘&#xff0c;且以java字符串作为xml数据 <% page contentType"text/html; charsetUTF-8" %> <%String path request.getContextPath(); %> <%String x…

读书 | 一切红利最终都是趋势红利

【读书总结】| 总结/Edison Zhou在去年年底就读完了刘润老师2016年出版的《趋势红利》&#xff0c;一直没有来得及做笔记整理&#xff0c;于是&#xff0c;这就来了。1所有红利最终都是趋势红利中国的企业近年来所处的环境正在发生系统性巨变&#xff0c;企业想要成功应变&…

好强大的仿生机械,这才是真正的黑科技!

全世界只有3.14 % 的人关注了数据与算法之美仿生机械就是模仿生物的形态、结构和控制原理设计制造出的功能更集中、效率更高并具有生物特征的机械。研究仿生机械的学科称为仿生机械学&#xff0c;它是20世纪60年代末期由生物学、生物力学、医学、机械工程、控制论和电子技术等学…

windows phone 8 的新特性

2019独角兽企业重金招聘Python工程师标准>>> windows phone 8 是微软windows phone系列操作系统的一次重大升级&#xff0c;在原有的基础上添加了许多新的特性。总体看来主要八中新的特性。&#xff08;Windows phone8 缩写WP8&#xff09; <1>硬件的升级 W…

oracle 数字处理函数,Oracle函数-单行函数-数字、日期、日期处理函数

函数的分类单行函数&#xff1a;一个input对应一个output&#xff0c;input和output存在一一对应的关系 如lower组函数&#xff1a;多个input&#xff0c;但是只对应一个output。如 sum()单行函数特点&#xff1a;每行返回一个结果&#xff0c;输入输出存在一一对应的关系能嵌套…

WPF 修改(优化)Menu菜单的样式

Menu菜单&#xff0c;在软件中使用率很高的一个控件。包含具有层级关系的一个或多个MenuItem作为子菜单。今天就来分享一个定义的菜单样式。看一下效果图&#xff1a;下面就来看看代码&#xff1a;本次代码&#xff0c;全部都在MainWindow.xaml内&#xff1a;<Window x:Clas…

世上最牛博士论文是这样的!

全世界只有3.14 % 的人关注了数据与算法之美第五牛博士论文就是在还没答辩之前已经发表在最好的期刊上&#xff0c;而且鉴于论文很长&#xff0c;该期刊必须像小说一样连载。实例&#xff1a;张五常博士论文《佃农理论》&#xff0c;当年在《法和经济学杂志》上连载四期。第四牛…