使用 python+Selenium2+chrome模拟用户登录新浪微博移动端
1、获取chromedriver.exe
1.1、获取chromedriver.exe
下载地址(google)请自备梯子
下载地址:http://chromedriver.storage.googleapis.com/index.html?path=2.21/
根据自己的版本进行下载,我这里用的chrome是50+的我下载最新的了2.21
1.2、放到工作目录
下载好后放到自己的chrome目录下(一般找到自己的chrome浏览器快捷方式打开所在位置就是chromedriver.exe要存放的位置了)
我的在这里
2、获取selenium
如果你系统上面有pip的话,直接可以使用下面的方法就可以安装了:
pip install -U selenium
如果你没有就只能通过下载到本地方式安装了 这里不再累述可以到上面的链接自行下载安装了。
下载地址: https://pypi.python.org/pypi/selenium
里面还有一些例子可以进行参考
3、实现代码
# -*- coding: UTF-8 -*-
import os
from time import sleep
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
# 初始化配置
def initWork():
# 初始化配置根据自己chromedriver位置做相应的修改
chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
return driver
# 执行登录
def handleLogin():
# 定义自己的用户名密码
username = "####"
password = "####"
# 执行操作的页面地址
url = 'http://m.weibo.cn/'
driver.set_window_size(480, 760)
driver.get(url)
# 目前还没学会cookie怎么用先获取到吧肯定用的到
# 获得cookie信息
cookie1 = driver.get_cookies()
# 将获得cookie的信息打印
print cookie1
# 下面就开始在打开的页面中自动执行操作了
# 根据xpath获取登录按钮
elem = driver.find_element_by_xpath("/html/body/div[1]/div/a[2]");
# 发送确认按钮跳转到登录页面
elem.send_keys(Keys.ENTER)
# 休眠两秒钟后执行填写用户名和密码操作
sleep(2)
elem = driver.find_element_by_xpath("//*[@id='loginName']");
elem.send_keys(username)
elem = driver.find_element_by_xpath("//*[@id='loginPassword']");
elem.send_keys(password)
elem = driver.find_element_by_xpath("//*[@id='loginAction']");
elem.send_keys(Keys.ENTER)
cookie2 = driver.get_cookies()
# 将获得cookie的信息打印
print cookie2
# 判断是否登录成功
if cookie1 == cookie2:
print u' ( ̄y▽ ̄)╭可能登录失败了手动登录一下吧'
sleep(60)
else:
wait = WebDriverWait(driver, 30)
elems = wait.until(lambda driver: driver.find_elements_by_css_selector('div.line-around.layout-box.mod-pagination > a:nth-child(2) > div > select > option'))
# 获取信息
while 1: # 循环条件为1必定成立
result = isPresent()
print u'判断页面1成功 0失败 结果是=%d' % result
if result == 1:
elems = driver.find_elements_by_css_selector('div.line-around.layout-box.mod-pagination > a:nth-child(2) > div > select > option')
return elems
break
else:
print u'页面还没加载出来呢'
sleep(20)
# 开始解析页面
def handlePage(elems):
x = 1
for page in elems:
print u'========第%d页========' % x
handleScroll()
perser()
x = x + 1
sleep(20)
def handleNextPage():
print u'====================================下一页======================================'
# 点击下一页
driver.find_element_by_css_selector('div.line-around.layout-box.mod-pagination > a.btn.box-col.line-left').click()
sleep(2)
# 判断元素是否存在
def isPresent():
temp =1
try:
elems = driver.find_elements_by_css_selector('div.line-around.layout-box.mod-pagination > a:nth-child(2) > div > select > option')
except:
temp =0
return temp
# 解析信息并翻页
def perser():
try:
perserElements()
sleep(10)
handleNextPage()
except:
print u'=!=!=!=!=!=!=!=!=!=!=发生了意外=!=!=!=!=!=!=!=!=!=!='
finally:
pass
# 解析微博
def perserElements():
elems = driver.find_elements_by_css_selector('div.card9')
for elem in elems:
head_img = elem.find_element_by_css_selector('header > a.mod-media.size-xs > div > img').get_attribute('src')
print u'头像地址:' + head_img
head_name = elem.find_element_by_css_selector('header > div > a > span').text
head_time_from = elem.find_element_by_css_selector('header > div > div').text
print head_name + u' ' + head_time_from
weibo_detail = elem.find_element_by_class_name('weibo-detail').text
print weibo_detail
print u'---------------------------------------'
# 执行滚动加载出全部内容
def handleScroll():
for i in range (1 , 7 , 1):
Transfer_Clicks(driver)
print u'滚动%d次' % i
sleep(2)
sleep(10)
# 定义一个滚动函数
def Transfer_Clicks(browser):
try:
browser.execute_script("window.scrollBy(0,document.body.scrollHeight)", "")
# 这个是执行一段Javascript函数,将网页滚到到网页顶部。
# browser.execute_script("window.scrollBy(0,5)", "")
# 向下滚动200个像素,鼠标位置也跟着变了
# ActionChains(browser).move_by_offset(0,-80).perform()
# 向上移动鼠标80个像素,水平方向不同
# ActionChains(browser).click().perform()
# 鼠标左键点击
# ActionChains(browser).key_down(Keys.TAB).perform()
# 模拟tab键的输入
# ActionChains(browser).send_keys(Keys.ENTER).perform()
# 模拟输入ENTER键
except:
pass
return "Transfer successfully \n"
if __name__ == '__main__':
driver = initWork()
try:
elems = handleLogin()
cookie3 = driver.get_cookies()
for cookie in driver.get_cookies():
print "driver.add_cookie({\'name\':\'%s\', \'value\':\'%s\'})" % (cookie['name'], cookie['value'])
# 将获得cookie的信息打印
print cookie3
handlePage(elems)
finally:
if driver._is_remote:
driver.close()
driver.quit()
pass
参考资料
http://blog.youkuaiyun.com/cjsafty/article/details/9206323
1868



被折叠的 条评论
为什么被折叠?



