用C#+Selenium+ChromeDriver爬取网页(模拟真实的用户浏览行为)

以下文章来源于公众号:DotNetCore实战

1.背景

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器。这里,我将介绍selenium + 谷歌浏览器的一般使用。

2.需求

在平常的爬虫开发中,有时候网页是一堆js堆起来的代码,涉及很多异步计算,如果是普通的http 控制台请求,那么得到的源文件是一堆js ,需要自己在去组装数据,很费力;但是采用Selenium+ChromeDriver可以达到所见即所得的完美效果。

3.实现方式

项目结构:为了方便使用,用的winform程序,附nuget包

以下是form1.cs的代码,这里就只放关键方法代码了。需要安装最新的chrome浏览器+代码中使用的chromedriver是 v2.9.248315

 #region 异常  退出chromedriver

        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

        public const int SW_HIDE = 0;
        public const int SW_SHOW = 5;

        [DllImport("user32.dll", EntryPoint = "ShowWindow")]
        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

        /// <summary>
        /// 获取窗口句柄
        /// </summary>
        /// <returns></returns>
        public IntPtr GetWindowHandle()
        {
            string name = (Environment.CurrentDirectory + "\\chromedriver.exe");
            IntPtr hwd = FindWindow(null, name);
            return hwd;
        }

        /// <summary>
        /// 关闭chromedriver窗口
        /// </summary>
        public void CloseWindow()
        {
            try
            {
                IntPtr hwd = GetWindowHandle();
                SendMessage(hwd, 0x10, 0, 0);
            }
            catch { }
        }

        /// <summary>
        /// 退出chromedriver
        /// </summary>
        /// <param name="driver"></param>
        public void CloseChromeDriver(IWebDriver driver)
        {
            try
            {
                driver.Quit();
                driver.Dispose();
            }
            catch { }
            CloseWindow();
        }

        #endregion 异常  退出chromedriver

效果:

说一下思路:

  • 1.跳转到指定的网页driver.Navigate().GoToUrl
  • 2.确定数据源,从driver.PageSource读取数据
  • 3.对html数据进行解析

到此这篇关于用C#+Selenium+ChromeDriver爬取网页(模拟真实的用户浏览行为)的文章就介绍到这了,更多相关用C#+Selenium+ChromeDriver 爬取网页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c# Selenium爬取数据时防止webdriver封爬虫的方法

    背景 大家在使用Selenium + Chromedriver爬取网站信息的时候,以为这样就能做到不被网站的反爬虫机制发现.但是实际上很多参数和实际浏览器还是不一样的,只要网站进行判断处理,就能轻轻松松识别你是否使用了Selenium + Chromedriver模拟浏览器.其中 window.navigator.webdriver 就是很重要的一个. 问题窥探 正常浏览器打开是这样的 模拟器打开是这样的 ChromeOptions options = null; IWebDriver driv

  • C#使用Selenium+PhantomJS抓取数据

    手头项目需要抓取一个用js渲染出来的网站中的数据.使用常用的httpclient抓回来的页面是没有数据.上网百度了一下,大家推荐的方案是使用PhantomJS.PhantomJS是一个没有界面的webkit浏览器,能够和浏览器效果一致的使用js渲染页面.Selenium是一个web测试框架.使用Selenium来操作PhantomJS绝配.但是网上的例子多是Python的.无奈,下载了python按照教程搞了一下,卡在了Selenium的导入问题上.遂放弃,还是用自己惯用的c#吧,就不信c#上没

  • c# 从内存中释放Selenium chromedriver.exe

    背景 我设置了一个c#代码来运行Selenium chromedriver.exe.在运行结束时,我有browser.close()来关闭实例.(browser = webdriver.Chrome())我相信它应该从内存中释放chromedriver.exe(我在Windows 7上).但是每次运行后,内存中仍有一个chromedriver.exe实例. 问题窥探 从理论上讲,调用browser.Quit将关闭所有浏览器选项卡并终止进程. 但是,在我的情况下,我无法做到这一点 - 因为我并行运

  • 用C#+Selenium+ChromeDriver爬取网页(模拟真实的用户浏览行为)

    以下文章来源于公众号:DotNetCore实战 1.背景 Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器.这里,我将介绍selenium + 谷歌浏览器的一般使用. 2.需求 在平常的爬虫开发中,有时候网页是一堆js堆起来的代码,涉及很多异步计算,如果是普通的http 控制台请求,那么得到的源文件是一堆js ,需要自己在去组装数据,很费力

  • 如何在scrapy中集成selenium爬取网页的方法

    1.背景 我们在爬取网页时一般会使用到三个爬虫库:requests,scrapy,selenium.requests一般用于小型爬虫,scrapy用于构建大的爬虫项目,而selenium主要用来应付负责的页面(复杂js渲染的页面,请求非常难构造,或者构造方式经常变化). 在我们面对大型爬虫项目时,肯定会优选scrapy框架来开发,但是在解析复杂JS渲染的页面时,又很麻烦. 尽管使用selenium浏览器渲染来抓取这样的页面很方便,这种方式下,我们不需要关心页面后台发生了怎样的请求,也不需要分析整

  • Selenium+Tesseract-OCR智能识别验证码爬取网页数据的实例

    目录 1.项目需求描述 2.整体思路 3.功能实现 1.项目需求描述 通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库. 2.整体思路 1.通过Selenium技术,无窗口模式打开浏览器 2.在输入框中动态输入订单号 3.将图片验证码截图保存到本地 4.通过Tesseract-OCR技术去本地识别验证码转化为文字 5.将获取的验证码输入输入框 6.点击查询获取列表数据 3.功能实现 1.下载并安装Google浏览器,安装Googl

  • 使用Post方法模拟登陆爬取网页的实现方法

    最近弄爬虫,遇到的一个问题就是如何使用post方法模拟登陆爬取网页. 下面是极简版的代码: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.Has

  • Scrapy基于selenium结合爬取淘宝的实例讲解

    在对于淘宝,京东这类网站爬取数据时,通常直接使用发送请求拿回response数据,在解析获取想要的数据时比较难的,因为数据只有在浏览网页的时候才会动态加载,所以要想爬取淘宝京东上的数据,可以使用selenium来进行模拟操作 对于scrapy框架,下载器来说已经没多大用,因为获取的response源码里面没有想要的数据,因为没有加载出来,所以要在请求发给下载中间件的时候直接使用selenium对请求解析,获得完整response直接返回,不经过下载器下载,上代码 from selenium im

  • Python3 使用selenium插件爬取苏宁商家联系电话

    Selenium简介 Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器. 此处使用了selenium插件 使用的是火狐浏览器 信息存储到csv表格里面 前面详细不多讲如果条件不满足自行百度安装 # -*- coding: utf-8 -*- """ Created on Wed Dec 11 20:21:04 2019 @author: Administr

  • python爬取网页版QQ空间,生成各类图表

    github源码地址: https://github.com/kuishou68/python 各类图表的实现效果 爬取的说说内容 个性化说说内容词云图 每年发表说说总数柱状图.每年点赞和评论折线图 7天好友动态柱状图.饼图 使用方法 按照你的谷歌浏览器下载指定版本的驱动 http://chromedriver.storage.googleapis.com/index.html 驱动跟两个python脚本放入同目录,我的版本是90.0.4430的,查看你自己的版本,下载后把我的chromedri

  • python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧! 所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取. 运行效果: http://photo.hupu.com/nba/tag/马刺 http://photo.hupu.com/nba/tag/陈露 源代码: # -*- coding: utf

  • selenium+PhantomJS爬取豆瓣读书

    本文实例为大家分享了selenium+PhantomJS爬取豆瓣读书的具体代码,供大家参考,具体内容如下 获取关于Python的全部书籍信息: 通过代码测试 request携带'User-Agent'及 'data'数据信息的方式均无法获取到相关信息,获取数据时,部分数据为空,导致获取过程中报错,无法获取全部数据,初步判定豆瓣读书的反爬机制较为严格:通过selenium 模拟浏览器请求的方法测试后发现,可利用 selenium 方法请求获取数据: #导入需要的模块 from selenium i

  • PHP 爬取网页的主要方法

    主要流程就是获取整个网页,然后正则匹配(关键的). PHP抓取页面的主要方法,有几种方法是网上前辈的经验,现在还没有用到的,先存下来以后试试. 1.file()函数 2.file_get_contents()函数 3.fopen()->fread()->fclose()模式 4.curl方式 (本人主要用这个) 5.fsockopen()函数 socket模式 6.插件(如:http://sourceforge.net/projects/snoopy/) 7.file()函数 <?php

随机推荐