C#如何使用selenium实现爬虫


本文小编为大家详细介绍“C#如何使用selenium实现爬虫”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#如何使用selenium实现爬虫”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Selenium 是一个用于Web应用程序测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。1、Selenium Webdriver(也就是Selenium2,Selenium3)和Selenium RCSelenium 1)一样提供了web自动化的各种语言调用接口库。相比Selenium RCSelenium WebDriver的编程接口更加直观易懂,也更加简练。但是和Selenium RC不同的是,Selenium Webdriver是通过各种浏览器的驱动(web driver)来驱动浏览器的,而不是通过注入JavaScript的方式。我们的代码运行起来是一个进程,里面调用Selenium WebDriver的库和各个浏览器的驱动进程 进行交互,传递Selenium命令 给它们,并且获取命令执行的结果,返回给我们的代码进行处理。2、Selenium WebDriver目前包括两个版本Selenium 2Selenium 3。这两个版本从开发代码调用接口上来看,几乎没什么区别。区别在于库的实现和web driver的实现。Selenium2Selenium组织帮各种浏览器写web driver的,而Selenium 3里面的web driver是由各个浏览器厂商(Apple,Google,Microsoft,Mozilla)自己提供的。所以Selenium 3的自动化效率更高,成功率也更高。3、Selenium WebDriver支持浏览器众多:Google ChromeMicrosoft Internet Explorer 7,8,9,10,11在 Windows Vista,Windows 7,Windows 8,Windows 8.1.Microsoft EdgeFirefoxSafariOpera利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码 ,做到可见即可爬。所以Selenium现在被广泛用于Python爬虫。查了下资料,发现这个工具确实强大,最重要的是,C#也是可以调用的。官方支持Java,C#,Python,Ruby,PHP,Perl,Javascript等语言官方文档(有C#示例):https://www.selenium.dev/documentation/en/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、在Main函数中输入以下代码如果是Chrome浏览器,可以这样:运行,会弹出IE浏览器,网页加载完成后,浏览器会自动关闭。控制台输入结果如下这样我们就可以轻松的获取动态渲染页面的源码。常用的等待分为显示等待WebDriverWait()隐式等待ImplicitlyWait()强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别Sleep(): 强制等待,设置固定休眠时间。ImplicitlyWait():隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。WebDriverWait():显示等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException用到Timeouts对象。这个对象是用来对设置器进行一些设置的。ImplicitlyWait:设置脚步在查找(定位)元素时最大的超时时间。如FindElement()方法在一些超大网页中进行定位时的超时时间。PageLoad:设置页面操作超时时间(不是页面加载时间)。是在页面进行跳转操作或刷新操作时的等待时间。如Navigation对象的各种操作方法,以及在页面上进行某种操作后的等待时间。AsynchronousJavaScript: 设置脚步异步执行的超时时间。代码如下:通过FindElement()这个方法来查找的。然后把参数传递过去。其中By.id(“su”)就是定位参数,传递一个对象过去。有8种定位方式。注意:其中PartialLinkText是模糊查找。比如百度网页中的关于 参数写“关”就可以了,不用写*这种符号。各方法使用优先原则:优先使用id,name,classname,link;次之使用CssSelector();最后使用Xpath();因为Xpath()方法的性能和效率最低下。1.Title:标题2.Url:链接3.Text:元素的文本值4.Selected勾选情况、TagName标记名标、Enabled编辑状态、Displayed显示状态5.GetAttribute()获取标签的属性6.弹出对话框的处理首先,要先了解三种对话框:Alert、Confirmation以及Prompt。测试网页test.html:下面进行测试:主要是进行Click和SendKeys操作,如图。其它的自己查看定义就知道了。SenKeys就是在定位到输入框后,把参数text赋值进去Click就是进行鼠标点击操作,比如点击按钮等。和IDE上一样的。单选、复选都是通过这个方法这点击的。Clear方法:是用于清空输入框的值,和SendKeys正好的作用正好相反。自己测试时,建议先给输入框赋值,再用Thread.Sleep(3000)来暂停一下,再用Clear方法,不然你还没看到效果时,程序已经完成了。Submit:特殊之处在于,当定位的是Form表单中任何一个元素,当操作完之后,直接调用那个Submit方法就能对整个Form表单完成提交。不用再返回重新查找表单元素。Selenium中在指定的文本框中输入指定的字符串Selenium中移动光标到指定的元素上要在不同的浏览器窗口之间切换,必须获得不同的窗口(标签)的标识符。用一个集合来保存这些数据。当需要到新窗口里进行操作时,需要将测试器前往新的窗口。开始创建的测试器是对窗口来的,所以当我们需要切换窗口时。需要调用 测试器.SwitchTo().window(获得标识) 这个方法来返回一个新的测试器对象。新的对象是代表的是切换的窗口。代码如下:效果如下:下面切换到新打开的窗口后,输入一个12345来表示我们成功了
在上面的代码基础下免费云主机域名 添加下面代码结果如图:1、切换焦点到id为固定值的iframe上进入页面后,光标默认焦点在DefaultContent中,若想要定位到iframe 需要转换焦点需要注意的是:切换焦点之后若想切换焦点到其他iframe上 需要先返回到defaultcontent,再切换焦点到指定的iframe上。2、切换焦点到id值为动态值的iframe上有时候 页面上浮出层的id为动态值,此时需要先获取所有符合记录的iframe放置在数组中,然后遍历数组切换焦点到目标iframe上。如下方法:在C#中,通过Cookies属性来获取当前的Cookie集合,然后进行增删改查操作。Cookie由5个部分组成:名称、值、所在域、路径和过期时间。下面我们进入百度首页,然后获取cookie,并让它变动一下来看到效果。 代码如下:运行效果如下:这个属性是可以对当前的窗口进行简单的控制。如获取坐标和大小,还可以将其最大化。下面我们用过示例代码来试试效果。
下面的代码是先打开网页,打印坐标和大小,再控制它最大化,再次打印坐标和大小。效果如下:这里有两个奇怪的地方:
1.我的屏幕是1080P的,输出后的数据中,长只有1936.如果减去16的话到正好是1920.但是宽应该是1080,如果任务栏的宽度是24的话,到也能说得过去。只是数据和我们要的有点偏差,这里需要注意一下。
2.window属性居然只有位置、大小和最大化方法。居然没有最小化或还原(退出最大化状态)方法。首先是准备好要添加的事件,然后再挂接。这里可以使用C#的语法糖。在+=后面直接按两次tab键,然后再移动到事件区编辑。挂接事件:有下面两种:Close():关闭WedDriver对象所在的窗口;
第一个是关闭一个窗口,一个wedDriver对象是可以有多个窗口的(之前的窗口切换也是提到过),需要关闭时要保证当前激活的窗口。比如一个wedDriver对象里有好多个窗口,你要关闭第2个窗口,就要用SwitchTo().Window()方法切换到第2个窗口才能关闭,不能直接关闭第几个窗口的。Quit():关闭所有相关窗口;
第二个关闭和这个webDriver对象所有相关的窗口。当然,一个脚本是可以有多个webDriver对象下面代码的代码展示这了两个方法的用法和用途。
1.打开百度首页,单击“注册”超级链接。
2.在弹出的窗口(百度账户注册)中,调用Close()方法,关闭新弹出的页面
3.再一次点击“注册”超级链接,调用Quit()方法来结束测试。读到这里,这篇“C#如何使用selenium实现爬虫”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: Go递归函数、函数类型、匿名函数与闭包怎么用

今天小编给大家分享一下Go递归函数、函数类型、匿名函数与闭包怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。递归指函数可以直接或间接的调用自…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/11 11:57
下一篇 03/11 11:57

相关推荐