![c7fd94dfa6dc66e6ef707055666c84ed.png](https://i-blog.csdnimg.cn/blog_migrate/aed59e0d539861870c212851439439a9.png)
SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享知识的同学投稿至 eesast@mail.tsinghua.edu.cn , 期待你的作品!
![7b136fc289bbab00aafacbb457061c62.png](https://i-blog.csdnimg.cn/blog_migrate/bac08b40643a286cdbfbf0a3db218600.jpeg)
闲来无事,不如下几个电电课件看看?
啥?太麻烦了?
安利你个东西8——selenium
硒?
①selenium?
Selenium 是一个用于web应用程序测试的工具。通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面:比如点击界面按钮,在文本框中输入文本等。它还可以从web界面获取信息,分析数据,甚至可以帮你抢一张车票。(妈妈再也不用担心我回不去家了)
Selenium支持的浏览器包括IE(7,8,9,10,11),Mozilla Firefox,Safari,Google Chrome,Opera等,可使用java,c#,python,js等多种语言进行编写,本文中将使用c#语言操控Google Chrome浏览器,实现自动下载电电新课件的功能。(虽然并不会看,看了也看不懂)
②安装与环境配置
程序中的自动化请求通过客户端库的编程接口发送给浏览器。比如,我们要模拟用户点击界面按钮的操作,自动化程序就会发送selenium库中的“点击元素”的请求给浏览器驱动。然后,浏览器驱动再转发这个请求给浏览器,进而实现点击操作。
这个过程中,需要我们安装的有两样东西:selenium库和浏览器驱动。
selenium
首先,我们新建一个控制台应用项目。
![457f3db895826e09dd2fd6e682348f93.png](https://i-blog.csdnimg.cn/blog_migrate/1fd86275d10d3a4c7eb76fbddfc9c08c.jpeg)
创建成功后,右键“依赖项”,选择“管理NuGet程序包”,搜索selenium,安装:
Selenium.RC
Selenium.Support
Selenium.WebDriver Selenium.WebDriver.ChromeDriver
浏览器驱动
浏览器驱动是我们的自动化程序与浏览器之间的“中间商”,它接收我们的界面操作请求并转发给浏览器,同时等待浏览器执行操作的结果,收到浏览器响应的结果后再返回给我们的自动化程序的客户端库,进而我们的程序就知道此次操作的结果如何了。
浏览器驱动 是一个独立的程序,由浏览器厂商提供,不同的浏览器需要不同的浏览器驱动。以Chrome浏览器为例,我们需要下载与之相对应的Chrome 浏览器驱动。访问https://chromedriver.storage.googleapis.com/index.html下载与本地浏览器版本相对应的驱动。比如我的Chrome浏览器版本号是77.0.3865,那么我需要下载的则是
![b85df4b83d4884cea10ebf8eadc942f4.png](https://i-blog.csdnimg.cn/blog_migrate/24fb1ef6a4dc2190da120442258b24d5.png)
下载完成后解压,把其中的.exe文件放在浏览器的安装目录下,浏览器驱动的配置就完成啦。
③写bug啦!
Step1-登录网络学堂
既然我们想实现下载电电课件的功能,首先就要让程序帮我们打开网络学堂。
![0aee1fcc48773073b4e379174d621aca.png](https://i-blog.csdnimg.cn/blog_migrate/1c4140400e47ee3706cec5f8c786260b.png)
先创建一个IwebDriver对象,并指明使用Chrome浏览器驱动,括号中要给出能找到浏览器驱动的路径,再调用函数打开网络学堂。
接下来就应该输入学号、密码登录啦。
按F12查看网页源代码,找到输入用户名和密码的输入框。
![1b6462ccd2305d73f1f7d1710053c60e.png](https://i-blog.csdnimg.cn/blog_migrate/8e3e6a6037ac3eaaa03766c284a22861.png)
![6b4aa39e1e6fd1015c8d08d262a02055.png](https://i-blog.csdnimg.cn/blog_migrate/fa70ddb3ec5cd559205dcdd8559eadc4.png)
调用FindElement()方法,通过CSS选择器定位这个元素,再调用元素的SendKeys()方法输入学号。
![5cb463ebd10007a7a91509b61aaed48b.png](https://i-blog.csdnimg.cn/blog_migrate/ccc8e645df5e5682addaf4c8e24efa53.png)
或者用一种更简便的写法:
![24e0b244ce4de677d8b5fa9377022538.png](https://i-blog.csdnimg.cn/blog_migrate/53dc46203a8d3062a23a4f1b5eeea28b.png)
输密码!不要真的输入2333
通过Id找到登录按钮,再调用click()函数点击,模拟登录。
![b956f56b827b4bef56533f4f2ce001a5.png](https://i-blog.csdnimg.cn/blog_migrate/8b818ad1ec34391e59e0e743b8682e82.png)
用户名和密码都正确的情况下,就可以成功登录啦。
Step2-打开电电(2)的课程文件
除了通过Id或CSS选择器查找元素之外,FindElement()还可以通过查找超链接标签中的文字内容找到相应的元素,比如我们通过搜索“电子电路与系统基础(2)(30230822-1)”再点击,就可以进入电电的课程界面了。
![7688b2cc82d8a78d3196436c5d66e542.png](https://i-blog.csdnimg.cn/blog_migrate/1e4169512950cee5b90de18df1c30512.png)
需要注意的是,我们的代码执行速度比页面加载速度快很多,点击登录按钮之后立即寻找元素可能是找不到的,这时我们可以创建一个WebDriverWait对象,等待我们要找的元素出现。
切换到新的标签页,更新WebDriverWait对象。
![00d17952e8d81534129e2c39ff0cad81.png](https://i-blog.csdnimg.cn/blog_migrate/e7203b3d5231f4b2787f04aba64c2af0.png)
通过Id找到课程文件选项并点击。
![a4e4ef02ffd5c10bd89afb63bb5d18e5.png](https://i-blog.csdnimg.cn/blog_migrate/39345c0c4df5cea7c6d5f6f210424391.png)
这一步完成后,我们就进入到课程文件中了。
Step3-下载新文件
用同样的方法获取全部课程文件列表,遍历所有文件,如果存在小图标“new”,则点击下载按钮,否则抛出异常转到下一个文件。即可获得所有的新文件。
![3163cde140e3c6267929b42231cae3a1.png](https://i-blog.csdnimg.cn/blog_migrate/0623f02f063caac2618c407f0ee5fd96.png)
如果此时立即退出页面,则下载过程会直接中断,为预留出下载时间,我们可以设置在20s后关闭所有页面。
④总结
至此,我们的下载课件小程序就写好啦!(完结撒花~~)
![83156660c8912236e8b49af3dd58db71.gif](https://i-blog.csdnimg.cn/blog_migrate/de0f91ae2fcbd258beb5f01d9c958e88.gif)
(不要问我为什么演示的是马原)
作为一款免费的自动化测试工具,selenium覆盖平台广,功能强大。闲暇之余不妨用它写写程序,实现一些有趣的功能~
源代码可参考下方的云盘链接。
https://cloud.tsinghua.edu.cn/d/619ce37371f94a1b930c/
![7276f26b299ab6f6abcc34602319238b.png](https://i-blog.csdnimg.cn/blog_migrate/7be434b9beedf900d59c9b5d39dcf39f.jpeg)
撰稿人:戴英茹
审稿人:孙志尧
![7149b7da4ee76692f52d1c4be6d14c68.png](https://i-blog.csdnimg.cn/blog_migrate/47f49b981b6ba0f51adece6536f8e547.png)