python+selenium環境搭建
我使用的是win10系統,將要搭建的版本分別是:python版本-3.7.0,selenium版本-3.14.1,火狐瀏覽器版本-61.0.2,geckodriver版本-0.21.0 現在開始搭建環境
第一步、下載Python,安裝Python,並添加到環境變量(我下載的是python3.7.0 紅框只是舉個栗子)
官網下載地址:https://www.python.org/downloads/windows/
安裝完後,打開運行,輸入cmd,輸入python,出現如下圖所示表示安裝成功
如果安裝時沒有勾選Add Python3.7 to PATH,需要手動添加到環境變量
在桌面右鍵我的電腦,點擊屬性,選擇高級系統設置,點擊環境變量,選擇Path新建,把pathon路徑添加進去,下面是我的電腦安裝的路徑
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\ #這個是為了方便在cmd使用pip安裝,而不用切換到pip所在的目錄
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\
第二步、安裝selenium,輸入pip install selenium(pip install selenium==3.0.1,可以下載指定版本的selenium),回車
這裏提示讓更新pip版本,可以按照提示所說的更新,輸入:python -m pip install --upgrade pip
輸入pip show seleium,可以查看安裝的selenium的版本,如下圖
第三步、下載火狐瀏覽器並配置驅動
火狐瀏覽器直接官網下載最新的,如果不想用最新的則可以到這個網站下載歷史版本:http://ftp.mozilla.org/pub/firefox/releases/
選擇想要下載的版本--選擇win64--選擇zh-CN/,進行下載(註意:把火狐瀏覽器的自動更新關掉,避免火狐瀏覽器自動更新後驅動不兼容的問題)
下載驅動文件,官網下載地址:https://github.com/mozilla/geckodriver/releases/
把下載的文件放到python的安裝目錄,如下圖(當然,也可以放在別的目錄裏,但是必需要把驅動所在的目錄添加到環境變量)
(打開cmd,輸入geckodriver -V查看驅動版本)
驗證環境:打開cmd,輸入以下代碼
python
from selenium import webdriver
bro = webdriver.Firefox()
瀏覽器正常打開
第四步、安裝Pycharm,並激活
鏈接: https://pan.baidu.com/s/1_CLo_CUC9c8lpZyWQkKjLA 提取碼: 6mx8
安裝完後,打開輸入激活碼並進行激活,pycharm激活碼鏈接:https://blog.csdn.net/u013066730/article/details/56966966
點擊創建新項目,到下圖的頁面
至此,環境搭建完畢。
這裏說一下踩到的雷:
剛開始搭建環境使用的版本分別是:selenium -3.14.0 geckodriver-0.11.1 Firefox-47.0.2
在運行一段代碼時
ActionChains(bro).move_to_element(ele).perform()#使鼠標移動到指定元素
報錯:actions did not match a known command
查詢百度後說是火狐和geckodriver的一個bug,更新下火狐和geckodriver的版本即可
另外firebug已經內置到火狐50.0以上的版本,所以查看頁面元素可以直接右上角點擊三條橫杠,選擇web開發者點擊查看器查看頁面元素
如果是火狐50.0以下版本,則需要下載firebug組件,火狐瀏覽器點擊選項在附加組件管理裏,搜索框輸入firebug下載
下面是一個百度登陸退出的例子:
#coding = utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time import os browser = webdriver.Firefox() #browser.minimize_window()#瀏覽器最小化 browser.maximize_window()#將瀏覽器最大化顯示。調用瀏覽器假如不是全屏,也不會影響腳本的執行 browser.get("https://www.baidu.com") browser.implicitly_wait(8)#智能等待8秒 browser.find_element_by_css_selector("#u1 > a[name=‘tj_login‘]").click()#點擊登錄 time.sleep(2) browser.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()#點擊用戶名登錄 time.sleep(2) user = browser.find_element_by_id("TANGRAM__PSP_10__userName").get_attribute("placeholder")#獲取節點屬性的值 assert user=="手機/郵箱/用戶名"#斷言屬性的值等於引號裏的值 browser.find_element_by_id("TANGRAM__PSP_10__submit").click()#不輸入用戶名直接點擊登錄按鈕 try: msg = browser.find_element_by_id("TANGRAM__PSP_10__error").text#獲取當前元素的屬性值 assert msg == "請您輸入手機/郵箱/用戶名"#assert斷言,msg等等與引號中的值 #print("出現提示 :%s"%msg)#打印msg信息 with open("loger.txt", "a+",encoding="utf-8") as f:#loger.txt文件若不存在就創建,並設置utf-8編碼 print(msg,file=f)#把錯誤信息追加到log文件 except Exception:#Exception是常規錯誤的基類,也可以不帶任何異常類型 print("未出現提示") browser.find_element_by_id("TANGRAM__PSP_10__userName").clear()# 清空用戶名 browser.find_element_by_id("TANGRAM__PSP_10__userName").send_keys("xxx")#輸入用戶名 browser.find_element_by_id("TANGRAM__PSP_10__password").send_keys("xxx")#輸入登錄密碼 browser.find_element_by_id("TANGRAM__PSP_10__submit").click()#點擊登錄按鈕 time.sleep(10) ele = browser.find_element_by_css_selector("span.user-name") ActionChains(browser).move_to_element(ele).perform()#移動鼠標到用戶名 time.sleep(2) browser.find_element_by_link_text("退出").is_displayed() browser.find_element_by_link_text("退出").click() time.sleep(5) browser.find_element_by_link_text("確定").click() time.sleep(3) print(browser.title,file=f) value = browser.find_element_by_css_selector("#u1 > a[name=‘tj_login").text if value=="登錄": print("測試通過",file=f) browser.quit()View Code
python+selenium環境搭建