1. 程式人生 > >使用python+Selenium2+chrome模擬使用者登入

使用python+Selenium2+chrome模擬使用者登入

使用 python+Selenium2+chrome模擬使用者登入新浪微博移動端

1、獲取chromedriver.exe

1.1、獲取chromedriver.exe

1.2、放到工作目錄

下載好後放到自己的chrome目錄下(一般找到自己的chrome瀏覽器快捷方式開啟所在位置就是chromedriver.exe要存放的位置了)

我的在這裡
這裡寫圖片描述

2、獲取selenium

這裡寫圖片描述

如果你係統上面有pip的話,直接可以使用下面的方法就可以安裝了:

pip install -U 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