初探python+selenium

因爲公司網絡管管控嚴格,服務器上訪問外網須要進行身份認證(按理說遞交個申請給開放相關域名外網訪問就好,無奈不給經過,又想馬兒跑又不給馬吃草),正好前一陣擼課程的時候看到selenium能夠實現自動化,順便擼一波作個記錄。
一、安裝 selenium
pip install selenium
等待出現Successfully installed selenium
python3.7安裝的時候默認安裝了pip省心了很多,服務器端用的2.7還要本身擼
下載setuptools 和 pip
解壓後進入目錄,運行 python setup.py install
 
二、下載 chromedriver + chrome
下載地址:
chrome須要與對應版本號的chromedriver 相匹配的,版本號不匹配會報錯
ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69
ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68
ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68
ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67
ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66
ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65
ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64
# driver = webdriver.Chrome()
固然也能夠下載其餘瀏覽器對應的驅動
# driver = webdriver.Firefox()
# driver = webdriver.Ie()
chromedriver.exe 放到python的安裝目錄下 或者Script目錄下 應該是配置到path環境變量下的路徑均可以
 
三、開擼一個簡單的例子
#coding=utf-8
import time
from selenium import webdriver
import os
#打開瀏覽器
browser = webdriver.Chrome()
#請求鏈接
browser.get("http://baidu.com")
#獲取頁面元素 輸入框
element = browser.find_element_by_id("kw")
#鍵入內容
element.send_keys("查詢內容")
#獲取頁面元素 查詢按鈕
element= browser.find_element_by_id("su")
#觸發元素點擊事件
element.click()
#休眠5秒
time.sleep(5)
#關閉瀏覽器
browser.quit()
 
四、一些經常使用的操做
有須要仍是查官方文檔吧
 
1)執行JS
js = "aler('text')"
browser.execute_script(js)
2)窗口操做
  1. browser.maximize_window() # 全屏
  2. browser.minimize_window() #最小化
  3. print (browser.get_window_size()) #獲取窗口大小
  4. browser.set_window_size(1280,800) # 設置分辨率 1280*800
  5. browser.close() #關閉當前串口
  6. browser.quit() #退出瀏覽器
3)元素定位
find_element_by_id() # document.getElementById()
find_element_by_name() #document.getElementsByName()
find_element_by_class_name() #document.getElementByclassName()
find_element_by_tag_name() #document. getElementsByTagName()
find_element_by_link_text() #文本連接定位
find_element_by_partial_link_text() #文本連接中部分文本進行定位 包含參數中的文本便可
find_element_by_xpath() #絕對路徑定位
browser.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/form/div/div/div[2]/input")
從HTML標籤開始描述出元素在dom樹上的路徑
也能夠用 "//標籤[@屬性名=屬性值]" 例如:find_element_by_xpath(".//input[@id='kw']")
find_element_by_css_selector() #利用css選擇器定位 相似JQuery
4)元素操做
clear 清除元素的內容,若是能夠的話
send_keys 在元素上模擬按鍵輸入
click 單擊元素
submit 提交表單
browser.find_element_by_id("id").clear()
browser.find_element_by_id("id").send_keys("內容")
browser.find_element_by_id("id").click()
browser.find_element_by_id("id").submit ()
 
五、其餘
服務器上執行時遇到錯誤提示
[22516:20196:0704/024642.979:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2
解決方案以下:
在註冊表里加一個值名稱爲MachineLevelUserCloudPolicyEnrollmen(數據爲空)就能夠了。
HKLM_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmen
 
Chrome正在受到自動軟件的控制
option = webdriver.ChromeOptions()
option.add_argument(‘disable-infobars‘)
browser = webdriver.Chrome(chrome_options=option)
 
遠程瀏覽器調用
遠程瀏覽器調用無界面實現不會實際打開瀏覽器,運行速度很快
首先須要下載selenium-server ,地址: https://www.seleniumhq.org/download/
須要配置java環境
控制檯輸入:java -jar selenium-server-standalone.jar -port 9999 啓動
webdriver.Remote(command_executor="[http://localhost:9999/wd/hub](http://localhost:4567/wd/hub "selenium 本地測試地址")", desired_capabilities=DesiredCapabilities.HTMLUNIT)
相關文章
相關標籤/搜索