使用python+Selenium2+chrome模擬使用者登入
阿新 • • 發佈:2019-01-11
使用 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