美文网首页
使用selenium通过ssh为服务器连接校园网

使用selenium通过ssh为服务器连接校园网

作者: 吃远 | 来源:发表于2018-12-14 22:38 被阅读0次

一、概述

  很多高校都有自己的校园网,学生在联网时登录特定网址,输入自己的学号密码等信息即可连接校内网。这一系列操作虽然简单,但如果要在远程服务器上实现,可能要费一点点功夫了。由于服务器上时不时需要安装一些环境,所以随时随地连接校园网(最好还能断网)成为我面临的一个不得不解决的问题。

  具体而言,困难体现在如下方面:其一,通过ssh连接服务器时,所有操作都要在命令行完成。或许看到这里你觉得还OK,作为经验丰富的宅男,鼠标盲点打开网页还不是分分钟。那么下一条——没有可用的X service,chrome,teamviewer等许多应用都无法正常打开——宣告宅男们可以洗洗睡了。

(远程连接没法使用X service确实是一个头疼的问题。很多原来用终端一句命令就可以打开的应用都无法正常开启。比如teamviewer,lantern等,现在还没有找到很好的办法。teamviewer只能通过开机启动,然后中间不能关掉。其他类似应用只能通过teamviewer打开。如果哪位朋友有好的方法希望不吝赐教!)

  其实可能有同学会想到一个方法——VNC Viewer。其实之前看舍友用的时候感觉还挺方便,毕竟teamviewer需要服务器和笔记本都联网,本身限制就多一些。然而之前在公司实习有一次向mentor提出安装vnc的请求时别他驳回,理由是VNC Vierwer“比较占用带宽”。网上查了下好像还真是,VNC的一大特点就是带宽占得多,慢...所以后来还是老实回去用ssh了。

二、selenium库实现自动点击与文本输入

  selenium是一个常用于自动化网页测试以及爬虫的Python库,可以模拟用户点击、文本输入等事件。selenium库的安装和使用并不复杂,不过要注意应保持浏览器版本与驱动版本的一致,否则用一段时间浏览器自动更新,可能导致webdriver无法访问网页。

2.1 selenium库的安装

  安装直接用pip install selenium即可。该模块支持多种浏览器,好像火狐浏览器是最方便的,有相关开发工具栏。不过这里我使用的是chrome。装好之后如果直接使用webdriver.Chrome()会报错,什么PATH之类的。意思就是没检测到可用的chromedriver。去网上下一个和自己chrome版本对应的driver,放在chrome浏览器安装路径下即可。(由于Chrome一般是自动安装,所以路径比较固定: win->C:\Program Files(x86), linux->/opt/google/chrome/)

   驱动版本映射表以及下载地址见这里

2.2 selenium库的使用

  使用起来还是比较直观和方便的。主要涉及到以下几个接口函数:

  1. driver = webdriver.Chrome()
    打开Chrome浏览器并创建一个driver对象(这一步通常是最容易出错的)
  2. driver.get("www.baidu.com")
    成员函数get接收一个url作为参数,浏览器将跳转至指定页面
  3. driver.find_element_by_XXX()
    该函数需要我们进入chrome开发者模式,检查目标按钮或区域(统称为元素element),寻找一些可用的pattern。这里的XXX可以是id,或者name等。比如下图中我检查了一个输入框的元素:
    从右侧可以看出,该输入框id为"username", name为"DDDDD"(不知道啥意思..),还有其他很多信息。这里只需要返回elem = find_element_by_id("username")的结果即可获取到这一个元素。
Fig. 1 浏览器开发者模式寻找元素pattern
  1. elem.click(), elem.send_keys() 模拟鼠标、键盘事件
    非常直观。click就是点按钮,send_keys就是输入一串字符。

  2. driver.switch_to.alert() 该函数应该引起特别注意。因为很多时候在浏览器上操作,网页也有可能触发被动操作。如下图:
    该图是我在点击注销按钮之后弹出来的提示窗口。如果忽略这个窗口的处理,将导致注销功能失败。因此selenium还需要知道一个用于应对被动弹出窗口(alert/confirm/prompt等)的接口,即driver.switch_to.alert()。该函数的返回值具有几个有用的功能:

  • text: 返回alert/confirm/prompt中的文字信息;
  • accept():接受现有警告框;
  • dismiss(): 解散现有警告框;
  • send_keys: 发送文本至警告框(没用过)
Fig. 2 网页触发被动响应事件
  1. driver.quit() 该函数用于关闭chrome应用。
    之前没加这一句,发现测试脚本每运行一次就会打开一个浏览器,次数多了以后可能影响电脑运行速度。故该接口也是非常有必要的。

由于实现连接校园网的脚本涉及的selenium接口不是很多,以后如果用到了再在这里补充。

三、 通过ssh运行selenium脚本

  使用上面的接口函数就足够写一个自动打开chrome浏览器实现登录的脚本了。不过我们最终的目的是在服务器上运行。然而试了一下,发现ssh打开命令行之后,运行这个脚本无法打开浏览器。

  Google了一下,找到了解决办法. 大概意思就是说,由于小黑窗没有图形界面,所以我们可以启动一个虚拟桌面,然后利用这个虚拟桌面操作原来操作在图形界面上的功能。具体就是再导入一个库:pyvirtualdisplay中的Display模块,然后:

display = Display(visible=0)
display.start()

(隐隐感觉这个pyvirtualdisplay库能解决一大类问题~~)
最后再driver.quit() 之后别忘了把虚拟桌面关闭:

display.stop()

四、 封装可执行文件

  至此,login.py脚本已经完成。完整的脚本可以随意到我的github上获取。考虑脚本要在linxu服务器上为师门多位同学服务,每次都用Python运行不是很方便,可移植性也不是很好,故考虑将脚本封装成可执行文件。

  使用模块:pyinstaller。 用法非常简单:

pyinstaller -F -w login.py

  哈哈~ 非常感谢大家阅读~ 欢迎大家留下自己的见解!

相关文章

  • 使用selenium通过ssh为服务器连接校园网

    一、概述   很多高校都有自己的校园网,学生在联网时登录特定网址,输入自己的学号密码等信息即可连接校内网。这一系列...

  • Ubuntu 16.04.3 LTS开启SSH远程登录

    问题:通过XShell等客户端使用ssh方式通过root用户连接Ubuntu虚拟机时,出现SSH服务器拒绝了密码,...

  • Linux知识积累

    SSH连接 ssh通过跳板机连接内网服务器,发现能ping通连接不上,检查了/etc /ssh/ssh_confi...

  • 2020-03-04

    #mac终端通过ssh连接远程服务器 在Mac OS X中使用SSH登录远程LINUX服务器的方法 在Mac中打开...

  • Git使用(三)

    用SSH连接GitHub 关于SSH: 使用SSH协议,你可以连接并验证远程服务器和服务。 使用SSH密钥,您可以...

  • ssh远程连接服务器不断开

    ssh连接服务器,空闲断线的办法,可以使用如下命令ssh远程连接服务器不断开:

  • MobaXterm自动断开连接设置

    场景: 使用MobaXterm工具通过SSH连接Linux服务器,如果一段时间没有操作,MobaXterm会把连接...

  • MacOS环境配置及使用技巧(待续)

    使用终端通过SSH连接远程服务器 打开终端,输入sudo su -,回车,输入密码,切换到root用户 输入ssh...

  • 快速部署node服务器入门篇

    ps:现有环境为刚申请腾讯云服务器 windows连接服务器使用:SSH Secure Shell Client ...

  • 通过终端上传文件

    通过终端给云服务器上传文件 步骤1:通过ssh连接云服务器,修改/etc/ssh/ssh_config文件。将其中...

网友评论

      本文标题:使用selenium通过ssh为服务器连接校园网

      本文链接:https://www.haomeiwen.com/subject/wfjnhqtx.html