selenium, vpn,

Selenium实现自动化浏览器蹭网前置

DolorHunter DolorHunter Follow Dec 06, 2020 · 15 mins read

Selenium实现自动化浏览器蹭网前置
Share this

最近进入了毕业前的空窗期, 已经上岸的同学每天没事干. 黄老爷发现在使用贵校 WebVPN 时并不会产生流量费用. WebVPN 的栏目中有百度学术, 通过百度学术跳转到百度搜索引擎, 再通过百度打开了新世界.

具体操作起来, 首先要登录贵校提供给外部网域的 WebVPN, 之后再通过网页内的跳转到达百度搜索, 就可以通过百度搜索免流量蹭网了. 如果单靠手动操作, 即使操作再熟练点来点去也很烦心, 作为偷懒能手肯定是要做一个自动化脚本 DolorHunter/WebVPN-auto 来让以上步骤自动化完成了. 其他学校估计也能这么操作, 可以自己去试一试.

略有耳闻过 Selenium 库, 大概就是一个用来做自动化测试的网页驱动模块(WebDriver), 很适合用来作为实现自动化浏览器蹭网前置的工具.

浏览器模拟步骤

模拟的步骤比较简单:

  1. 打开 WebVPN 登录页面
  2. 输入账号密码点击登录
  3. 跳转到百度
  4. 打包封装

打开WebVPN登录页面

打开网页指令需要先指定使用的浏览器(WebBrowser), 调用 webdriver 的Chrome(), Firefox()等就行. selenium 同时还需要安装浏览器驱动才能打开网页. 我选用了一种最简单的方法, 即直接 import chromedriver_binary, 自动配置最新的Chrome驱动. 因为要求浏览器版本和驱动版本相同, 因此记得去升级Chrome浏览器, 防止报错.

之后调用方法get(url) 打开网页.

from selenium import webdriver
import chromedriver_binary  # Adds chromedriver binary to path

driver = webdriver.Chrome()
driver.get(LOGIN_URL)

输入账号密码点击登录

登录需要在指定的HTML标签内输入内容, 首先需要定位到用户名和密码的所在标签. 寻找标签可以打开 F12 调试模式, 并使用浏览器内的 Inspect 功能快速定位标签. 找到两个标签如下:

input autocomplete="new-password" id="user_name" placeholder="个人ID" type="text" name="username"

input autocomplete="new-password" placeholder="密码" type="password" name="password"

确认标签唯一性的方法有三种: id, name, classname. 这边显然要用name来寻找标签, 因此使用 find_element_by_name 方法, 并在参数内输入 name.

之后通过send_keys方法传输内容. 在完成了账号密码的输入后, 使用 send_keys(Keys.RETURN) 方法完成登录.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import chromedriver_binary  # Adds chromedriver binary to path


LOGIN_URL = 'https://vpn.hfut.edu.cn/login'

username = ""
password = ""
driver = webdriver.Chrome()
driver.get(LOGIN_URL)
element = driver.find_element_by_name("username")
element.send_keys(username)
element = driver.find_element_by_name("password")
element.send_keys(password)
element.send_keys(Keys.RETURN)

跳转到百度

登录后自动跳转到 WebVPN 首页内, 这是一个导航栏目. 如果要找到百度, 是不是应该要先 find_element 到百度学术, 然后再在每个页面内找标签然后点击, 直到跳转到百度或者其他目标页面呢? 不尽然.

在我们首次到达百度后, 得到了一个 URL 地址, 此地址为静态地址. 因此只需要在登陆后, 通过这个已知URL跳转到百度页面就行了.

BAIDU_URL = 'https://vpn.hfut.edu.cn/https/77726476706e69737468656265737421e7e056d2253161546b468aa395/?wrdrecordvisit=1606029726000'

driver.get(BAIDU_URL)

打包封装

之后再做了一个 bat 脚本, 用来当其启动项, 就大功告成了. 第一行是隐藏cmd框, 第二行调用python文件.

%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
python vpn-hfut.py

优点与缺点

其优点显而易见, 能够自动化完成蹭网前置操作, 方便免费蹭学校网, 而且网络速度还可以, 感觉是没有限速的. 在完成配置后, 可以把bat文件的快捷方式几乎当成一个蹭网浏览器, 使用流媒体服务再也不花流量了.

这么好的东西, 难道就没有缺点吗?

工具的不足之处在于因为使用的是学校网络发送请求, 因此没有办法使用代理; 只能在浏览器窗口内跳转(百度到不了的地方通常就到不了); 并且只有在校内(可以连上有线/无线校园网的地方), 这一蹭网手段才有意义.

Join Newsletter
Get the latest news right in your inbox. We never spam!
DolorHunter
Written by DolorHunter
Developer & Independenet Blogger