C#爬虫:使用Selenium,Selenium配置指南
一、介绍
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
1、Selenium Webdriver(也就是Selenium2,Selenium3)和Selenium RC(Selenium 1)一样提供了web自动化的各种语言调用接口库。相比Selenium RC,Selenium WebDriver的编程接口更加直观易懂,也更加简练。
但是和Selenium RC不同的是,Selenium Webdriver是通过各种浏览器的驱动(web driver)来驱动浏览器的,而不是通过注入JavaScript的方式。
我们的代码运行起来是一个进程,里面调用Selenium WebDriver的库和各个浏览器的驱动进程 进行交互,传递Selenium命令 给它们,并且获取命令执行的结果,返回给我们的代码进行处理。
2、Selenium WebDriver目前包括两个版本Selenium 2和Selenium 3。这两个版本从开发代码调用接口上来看,几乎没什么区别。区别在于库的实现和web driver的实现。
Selenium2是Selenium组织帮各种浏览器写web driver的,而Selenium 3里面的web driver是由各个浏览器厂商(Apple,Google,Microsoft,Mozilla)自己提供的。所以Selenium 3的自动化效率更高,成功率也更高。
3、Selenium WebDriver 支持浏览器众多:
- Google Chrome
- Microsoft Internet Explorer 7,8,9,10,11在 Windows Vista,Windows 7,Windows 8,Windows 8.1.
- Microsoft Edge
- Firefox
- Safari
- Opera
利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码 ,做到可见即可爬。
所以Selenium现在被广泛用于Python爬虫。查了下资料,发现这个工具确实强大,最重要的是,C#也是可以调用的。
官方支持Java,C#,Python,Ruby,PHP,Perl,Javascript等语言
官方文档(有C#示例):https://www.selenium.dev/documentation/en/
1、安装Selenium
1、我们新建一个C#控制台程序
2、使用Nuget搜索以下依赖库
需要引用的核心库是Selenium.RC,Selenium.Support,Selenium.WebDriver
然后再需要引用浏览器驱动库,这里我以新版Edge浏览器为例,新版Edge使用方式跟Chrome是一样的,程序包名称为Selenium.WebDriver.MSEdgeDriver。
备注:也可以在微软WebDriver官网下载Edge (Chromium)的webdriver,需要和当前浏览器版本一致。然后下载放置到项目可执行文件的目录。
如果使用Chrome:
先查下本机Chrome的版本
然后去Nuget搜索Selenium.WebDriver.ChromeDriver进行下载安装。
注意:webdriver版本只需要和当前浏览器主版本一致即可。
3、实现
界面设计:
代码:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
using System;
using System.Windows.Forms;
namespace CMS_Spider
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// edge浏览器驱动测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_EdgeTest_Click(object sender, EventArgs e)
{
var service = EdgeDriverService.CreateDefaultService(@".", "msedgedriver.exe");
service.HideCommandPromptWindow = true;// 关闭黑色cmd窗口
var options = new EdgeOptions();
options.AddArgument("--headless");
using (IWebDriver driver = new OpenQA.Selenium.Edge.EdgeDriver(service, options))
{
driver.Navigate().GoToUrl(txt_url.Text); //driver.Url = "http://www.baidu.com"是一样的
var source = driver.PageSource;
this.textBox1.Text = source;
}
}
/// <summary>
/// 谷歌浏览器驱动测试
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_ChromeTest_Click(object sender, EventArgs e)
{
var service = ChromeDriverService.CreateDefaultService(@".", "chromedriver.exe");
service.HideCommandPromptWindow = true;// 关闭黑色cmd窗口
var options = new ChromeOptions();
options.AddArgument("--headless");
using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(service, options))
{
driver.Navigate().GoToUrl(txt_url.Text); //driver.Url = "http://www.baidu.com"是一样的
var source = driver.PageSource;
this.textBox1.Text = source;
}
}
}
}
运行效果:
二、配置指南
三、参考: