Python實現自動登陸站點

若是咱們想要實現自動登陸,那麼咱們就須要可以驅動瀏覽器(好比谷歌瀏覽器)來實現操做,ChromeDriver 恰好可以幫助咱們這一點(非谷歌瀏覽器的驅動有所不一樣)。html

1、確認軟件版本

首先咱們須要確認咱們所使用的谷歌瀏覽器版本,這裏測試的谷歌瀏覽器版本爲(版本 67.0.3396.87(正式版本) (64 位)),點擊設置—關於Chrome,則能夠看到python

咱們進入 Chromedriver 的官網下載頁面,能夠看到最新的 2. 4 版本支持谷歌的 v66-68,下載並保存路徑便可git

這裏咱們下載 win 版本,解壓後存放到路徑 「E:\chromedriver.exe」。web

2、初步訪問網站

除了使用 Chromedriver做爲驅動,咱們想要訪問網站,還須要用到 Selenium 模塊,Selenium 是一個自動化測試工具,利用它咱們能夠驅動瀏覽器執行特定的動做,如點擊、下拉等等操做,同時還能夠獲取瀏覽器當前呈現的頁面的源代碼,作到可見便可爬。對於一些 JavaScript 動態渲染的頁面來講,此種抓取方式很是有效。咱們先來安裝此模塊chrome

pip install selenium

接着咱們實現的代碼以下瀏覽器

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/6/24 20:45
# @Author  : zhouyuyao
# @File    : demon2.py
import os

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = "E:\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver  # 獲取chromedriver可執行文件路徑
# print(os.environ["webdriver.chrome.driver"])
driver = webdriver.Chrome(chromedriver)       # 聲明瀏覽器對象
driver.get("http://www.python.org")           # 訪問頁面,用 get() 方法來請求一個網頁,參數傳入連接 URL 便可
time.sleep(10)                                # 停留10s
driver.quit()                                 # 關閉瀏覽器

運行以後咱們便發現彈出了 Chrome 瀏覽器,自動訪問了 Python 官網,隨後瀏覽器關閉。bash

3、自動登陸網站

咱們會須要經過 XPath 查找元素,使用 XPath 的主要緣由之一就是當你想獲取一個既沒有 id 屬性也沒有 name 屬性的元素時, 你能夠經過 XPath 使用元素的絕對位置來獲取他(這是不推薦的),或相對於有一個 id 或 name 屬性的元素 (理論上的父元素)的來獲取你想要的元素。XPath 定位器也能夠經過非 id 和 name 屬性查找元素。cookie

接着咱們找到京東的登陸界面,查看源代碼,會發現若是想要實現帳號登陸京東,就必須找到源碼中帳戶登陸的惟一鍵,此處惟一爲「clstag」值dom

絕對的 XPath 是全部元素都從根元素的位置(HTML)開始定位,只要應用中有輕微的調整,會就致使你的定位失敗。 可是經過就近的包含 id 或者 name 屬性的元素出發定位你的元素,這樣相對關係就很靠譜, 由於這種位置關係不多改變,因此可使你的測試更增強大。ide

這裏咱們經過查找超連接<a>的位置來定位帳戶登陸

driver.find_elements_by_xpath('//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')[0].click()

而後咱們在谷歌的調試模式中分別找到登陸的 「帳號「(loginname)、「密碼「(nloginpwd) 以及 「登陸」 (loginsubmit)的 id 。

最後咱們的實現代碼以下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time    : 2018/6/24 21:20
# @Author  : zhouyuyao
# @File    : demon3.py
import random
import time
import os
from selenium import webdriver

def randomSleep(minS, maxS):        # 定義隨機停頓時間函數
    time.sleep((maxS-minS)*random.random() + minS)

url = 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F'
chromedriver = "E:\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)   # 聲明瀏覽器對象
driver.get(url)    # 訪問頁面,用 get() 方法來請求一個網頁,參數傳入連接 URL
randomSleep(1, 3)

driver.find_elements_by_xpath('//a[@clstag="pageclick|keycount|login_pc_201804112|10"]')[0].click()
# find_elements_by_xpath 經過XPath查找元素
randomSleep(1, 2)

driver.find_element_by_id('loginname').clear()
randomSleep(1, 3)

driver.find_element_by_id('loginname').send_keys("username")
randomSleep(1, 2)

driver.find_element_by_id('nloginpwd').send_keys("userpassword")
randomSleep(3, 5)

driver.find_element_by_id('loginsubmit').click()
randomSleep(5, 10)

print(driver.get_cookies())
driver.close()       # 關閉瀏覽器

運行以後程序打開了瀏覽器,自動輸入帳號密碼併成功登陸京東

以後退出瀏覽器,並拿到了cookies 打印了出來。

登陸其餘網站能夠參照該操做流程,後續若有需求將進行更新。

 

 

參考資料

1. ChromeDriver的安裝

2. Selenium的使用

3. OS.ENVIRON()詳解

4. 經過XPath查找元素

5. 洞見 SELENIUM 自動化測試

6. 【error】selenium啓動chrome時,彈出設置頁面:Microsoft Windows惡意刪除工具...

相關文章
相關標籤/搜索