运用selenium和apscheduler库完成一个小外挂
github源码在此,记得点星:
https://github.com/brandonxiang/selenium_apscheduler_example
引言
机缘巧合,我看到一些python写的游戏外挂的教程(主要是网页游戏),也是,点击屏幕位置。这也激发了我去实现类似的功能,主要用途是去定期点击浏览器屏幕上的某个控件去实现一些功能。当然这类似的工具还可以应用到其他地方,让人脑洞大开,例如火车抢票,定时打卡之类,内容有点敏感,不再展开。
原理
这个小外挂基于python,运用了两个库selenium和apscheduler。
其中,selenium是一个出色的浏览器操作库,英文叫做Web Driver,主要是用于控制(包括IE在内的)浏览器,网页测试。当然他也可以用作爬虫,参考我的爬虫之路 (静态+动态JS加载) selenium + PhantomJS,虽然我觉得爬虫用request+beautifulsoap会在效率上更好,因为它不经过浏览器端。同类型的Web Driver库还有许多,不在这里展开。
然而,apscheduler是一个定时框架,支持python解释器和cron格式。
用法
克隆源码,安装第三方库,运行脚本即可。
git clone https://github.com/brandonxiang/selenium_apscheduler_example.git
pip install -r requirements.txt
源码
selenium
引用webdriver获取浏览器,webdriver提供了Firefox,PhantomJS等多款国外浏览器可选。browser.get()则是跳转到某个网页。
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://XX.XX.com/")
find_element_by_id和find_element_by_tag_name则是通过id或者tag_name去找到对应的元素。send_keys()则是往控件内部传值。click()则是点击事件。
WebDriverWait(browser,10).until(EC.title_contains("系统".decode('utf8')))
当网页发生跳转,需要利用WebDriverWait(browser,时间)等待,否则页面加载不完整。然而,until(EC.title_contains("系统".decode('utf8')))则是等到直到title出现系统两个字。详细教程参考selenium官网
apscheduler
通过BackgroundScheduler()生成一个后台定时框架,然后将其启动。
schedular = BackgroundScheduler()
schedular.start()
运用解释器去设置时间间隔,这里使用cron,day_of_week是一个星期中的某几天或星期几,hour和minute是时和分,当然,也有秒的设定。你也可以不使用解释器和cron来设置时间,那样自由度更高。详细教程参考apscheduler文档
@schedular.scheduled_job('cron',day_of_week='mon-fri',hour=8,minute=58)
总结
这里将两个框架结合了一下。总结一下,首先了解控件的对应的id或者class等属性,然后针对某个控件通过属性进行捕获,后生成点击,文本输入,页面跳转等事件即可。