若是咱們想要實現自動登陸,那麼咱們就須要可以驅動瀏覽器(好比谷歌瀏覽器)來實現操做,ChromeDriver 恰好可以幫助咱們這一點(非谷歌瀏覽器的驅動有所不一樣)。html
首先咱們須要確認咱們所使用的谷歌瀏覽器版本,這裏測試的谷歌瀏覽器版本爲(版本 67.0.3396.87(正式版本) (64 位)),點擊設置—關於Chrome,則能夠看到python
咱們進入 Chromedriver 的官網下載頁面,能夠看到最新的 2. 4 版本支持谷歌的 v66-68,下載並保存路徑便可git
這裏咱們下載 win 版本,解壓後存放到路徑 「E:\chromedriver.exe」。web
除了使用 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
咱們會須要經過 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 打印了出來。
登陸其餘網站能夠參照該操做流程,後續若有需求將進行更新。
2. Selenium的使用
4. 經過XPath查找元素
6. 【error】selenium啓動chrome時,彈出設置頁面:Microsoft Windows惡意刪除工具...