返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >用C#+Selenium+ChromeDriver爬取网页(模拟真实的用户浏览行为)
  • 791
分享到

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

2024-04-02 19:04:59 791人浏览 安东尼
摘要

以下文章来源于公众号:DotNetCore实战 1.背景  selenium是一个用于WEB应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作

以下文章来源于公众号: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 爬取网页内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://lsjlt.com/news/161875.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作