前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selenium自动登录挂stackoverflow的金牌

selenium自动登录挂stackoverflow的金牌

作者头像
十四君
发布2019-11-28 17:12:05
9050
发布2019-11-28 17:12:05
举报
文章被收录于专栏:UrlteamUrlteam

最近玩起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这模块进行浏览器控制,更具密码帐号的表单进行填写即可.

本身是一个小问题但是具体部署起来就有点难度了.

代码语言:javascript
复制
#!/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环境下直接测试情况如下:

代码语言:javascript
复制
python selenuium_so.py

能自动化了那如何定时呢?

然后问题来了,如何定时运行呢?首先肯定会想到linux下的crontab 这个自动定时运行脚本的自带软件非常好用.写一个执行语句即可

我把文件都放在根目录下:

代码语言:javascript
复制
0 9 */1 * *  python ~/selenium_so.py >> log1.txt

这样.是每天的早上9点就自动运行,.,但是..你千万别这么弄因为这样是失败的.!!!

因为crontab是默认不可使用可视化界面的如果你用的是chrome的内核就不运行了.,所以说得这么处理.

区分两种结构,要么使用phantomjs来作为内核.首先你得安装phantomjs,因为他本身就是无界面的所以无障碍运行.

代码语言:javascript
复制
0 9 */1 * *  python ~/selenium_so.py >> log1.txt

如果你是使用chrome作为内核则需要给crontab加一句可视化的设置

代码语言:javascript
复制
0 9 */1 * * export DISPLAY=:0; python ~/selenium_so.py >> log1.txt

不光看这样好像答案出来的很容易,.,查了不少资料才找到这样的设置..

当然这样基本能跑了,但是问题的可能也还是有的,不要以为这个全世界最大的程序员问答社区会被这样刷爆了.

当!很偶尔会有验证码,来袭..

这个技术就太牛逼了,,我没法解决,不是说光点击那个我不是机器人的按钮就可以了,他会检测你在浏览器活动中多种行为指标,比如鼠标点击和移动,还有浏览记录等,来判断你是否是机器人..但是预防他出现的思路也是有的,.这个程序首先是在自己电脑上跑,对面绑定行为是根据ip地址的,你是同样的ip地址,也有同样的chrome浏览器,那么在日常生活中多用stackoverflow,这样正常人的比例就更高了.出现概率也低..

原创文章,转载请注明: 转载自URl-team

本文链接地址: selenium自动登录挂stackoverflow的金牌

Related posts:

  1. Scrapy-笔记一 入门项目 爬虫抓取w3c网站
  2. Scrapy笔记四 自动爬取网页之使用CrawlSpider
  3. Scrapy笔记五 爬取妹子图网的图片 详细解析
  4. 基于百度IP定位的网站访问来源分析的python实战项目–实践笔记零–项目规划
  5. 爬虫中关于cookie的运用
  6. 爱奇艺腾讯搜狐优酷四大视频网站反爬虫技术研究
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境安装:
  • 自动化程序设计
  • 能自动化了那如何定时呢?
  • 当!很偶尔会有验证码,来袭..
    • Related posts:
    相关产品与服务
    验证码
    腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档