最近玩起stackoverflow了,其中有一项成就是 Visit the site each day for 100 consecutive days. (Days are counted in UTC.)
还有持续30天可以拿银牌.写一个小程序每天登录一次吧.项目代码在github反爬虫技术汇总开源项目中:
https://github.com/luyishisi/Anti-Anti-Spider/tree/master/selement/so_gold
先装selenium2,哪种方式装都可以,我一般都是直接下载压缩包,然后用python setup.py install命令来装,
selenium 2.42.1的下载地址:https://pypi.python.org/pypi/selenium/2.42.1
然后下载phantomjs,https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-windows.zip,解压后可以看到一个phantomjs.exe的文件()linux下命令装即可
程序很简单,使用seleium这模块进行浏览器控制,更具密码帐号的表单进行填写即可.
本身是一个小问题但是具体部署起来就有点难度了.
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#-------------------------------------------------------------------------
# 程序:selenium_so.py
# 版本:0.1
# 作者:ly
# 日期:编写日期2016/11/23
# 语言:Python 2.7.x
# 系统: linux ubuntu 16.04
# 操作:python selenuium_so.py
# 功能:结合crontab定时启动每天自动登录so网站,刷银牌用
#-------------------------------------------------------------------------
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time,sys
# 中文编码设置
reload(sys)
sys.setdefaultencoding('utf-8')
Type = sys.getfilesystemencoding()
#加载chrome 内核
driver = webdriver.Chrome()
#也可以选择无界面的phantomjs 这将决定你下方如何做定时启动的设置.
#driver = webdriver.PhantomJS()
#window下需要制定你phantomjs的位置.比如
#webdriver.PhantomJS(executable_path='C:\Users\Desktop\phantomjs-1.9.7-windows\phantomjs.exe')
#发起请求
driver.get("https://stackoverflow.com/users/login?ssrc=head&returnurl=http%3a%2f%2fstackoverflow.com%2fusers%2f7197440%2fa83533774%3ftab%3dtopactivity")
#获取用户名框并输入
elem = driver.find_element_by_xpath('//*[@id="email"]')
elem.send_keys("**")
#获取密码框并输入
elem = driver.find_element_by_xpath('//*[@id="password"]')
elem.send_keys("**")
#通过回车键进行登录 chrome下可用
#elem.send_keys(Keys.RETURN)
# 通过id选择到登录键 phantomjs下只能用这个<br>driver.find_element_by_id('submit-button').click()<br>
time.sleep(2)
#保存页面截图
name = time.ctime().replace(' ','-')+'.png'
driver.save_screenshot(name)
#print driver.page_source
time.sleep(2)
print 'end',time.ctime()
driver.close()
在linux环境下直接测试情况如下:
python selenuium_so.py
然后问题来了,如何定时运行呢?首先肯定会想到linux下的crontab 这个自动定时运行脚本的自带软件非常好用.写一个执行语句即可
我把文件都放在根目录下:
0 9 */1 * * python ~/selenium_so.py >> log1.txt
这样.是每天的早上9点就自动运行,.,但是..你千万别这么弄因为这样是失败的.!!!
因为crontab是默认不可使用可视化界面的如果你用的是chrome的内核就不运行了.,所以说得这么处理.
区分两种结构,要么使用phantomjs来作为内核.首先你得安装phantomjs,因为他本身就是无界面的所以无障碍运行.
0 9 */1 * * python ~/selenium_so.py >> log1.txt
如果你是使用chrome作为内核则需要给crontab加一句可视化的设置
0 9 */1 * * export DISPLAY=:0; python ~/selenium_so.py >> log1.txt
不光看这样好像答案出来的很容易,.,查了不少资料才找到这样的设置..
当然这样基本能跑了,但是问题的可能也还是有的,不要以为这个全世界最大的程序员问答社区会被这样刷爆了.
这个技术就太牛逼了,,我没法解决,不是说光点击那个我不是机器人的按钮就可以了,他会检测你在浏览器活动中多种行为指标,比如鼠标点击和移动,还有浏览记录等,来判断你是否是机器人..但是预防他出现的思路也是有的,.这个程序首先是在自己电脑上跑,对面绑定行为是根据ip地址的,你是同样的ip地址,也有同样的chrome浏览器,那么在日常生活中多用stackoverflow,这样正常人的比例就更高了.出现概率也低..
原创文章,转载请注明: 转载自URl-team
本文链接地址: selenium自动登录挂stackoverflow的金牌