selenium一個核心是WebDriver,WebDriver啓動目標瀏覽器,並綁定到指定端口,而後與該端口直接進行通訊。php
安裝selenium:css
pip install selenium
在使用的時候可能遇到下面的錯誤:html
'geckodriver' executable needs to be in PATH 'chromedriver' executable needs to be in PATH
說明須要driver,Firefox能夠經過:geckodriver下載python
Chrome要先看一下對應的版本,在Chrome瀏覽器中輸入:git
chrome://version/
而後能夠到下面的地址下載對應版本的driver: chromedriver下載1github
下載以後最後放在path中,對於python來講,能夠放在安裝目錄的scripts目錄下chrome
from selenium import webdriver browser = webdriver.Firefox() # browser = webdriver.Firefox(executable_path=r'C:\soft\lan\python3\Scripts\geckodriver.exe') # browser = webdriver.Chrome() browser.get("https://www.baidu.com/index.php?tn=monline_3_dg")
若是driver沒有放在path目錄中,那麼就能夠指定了driver的存放路徑。npm
from selenium import webdriver driver = webdriver.Firefox() file_path = r'file:///F:\tmp\table.html' driver.get(file_path)
webdriver不單單能夠打開本地的文件,這很是方便我調試。api
from selenium import webdriver import time SLEEP_TIME = 3 driver = webdriver.Firefox() file_path = r'file:///F:\tmp\table.html' driver.get(file_path) # 暫停一個時間,方便觀察執行的操做 time.sleep(SLEEP_TIME) # 設置瀏覽器寬400、高400 driver.set_window_size(400, 400) time.sleep(SLEEP_TIME) # 將瀏覽器最大化顯示 driver.maximize_window() time.sleep(SLEEP_TIME) driver.get("https://www.baidu.com/index.php?tn=monline_3_dg") time.sleep(SLEEP_TIME) # 回退一個頁面 driver.back() time.sleep(SLEEP_TIME) # 前進一個頁面 driver.forward() time.sleep(SLEEP_TIME) # 關閉當前窗口 driver.close() time.sleep(SLEEP_TIME) # 並關瀏覽器 driver.quit()
如上webdriver提供了不少操做瀏覽器的接口,通常比較少用,由於咱們不少時候都不但願打開瀏覽器,只但願獲取結果。
# options = webdriver.FirefoxOptions() options = webdriver.ChromeOptions() options.headless = True # driver = webdriver.Firefox(options=options) driver = webdriver.Chrome(options=options)
若是不想打開瀏覽器,能夠headless設置爲True
不少時候,咱們但願藉助於JS的強大功能,因此咱們須要執行JS,好比咱們要滾動窗口,webdriver並無提供相應的接口,咱們就能夠經過JS來實現。
from selenium import webdriver import time SLEEP_TIME = 3 driver = webdriver.Firefox() file_path = r'file:///F:\tmp\table.html' driver.get(file_path) time.sleep(SLEEP_TIME) # 將頁面滾動條拖到底部 jsCode = r"document.documentElement.scrollTop=100000" driver.execute_script(jsCode) time.sleep(SLEEP_TIME) # 將滾動條移動到頁面的頂部 jsCode = r"document.documentElement.scrollTop=0" driver.execute_script(jsCode) time.sleep(SLEEP_TIME) # 獲取h1元素並隱藏,把nav的字體顏色修改成blue h1 = driver.find_element_by_tag_name('h1') nav = driver.find_element_by_id('nav') driver.execute_script(r'arguments[0].style.display="none";arguments[1].style.color="blue"', h1, nav) time.sleep(SLEEP_TIME) # 並關瀏覽器 driver.quit()
獲取元素能夠參考前面提到的獲取元素的介紹,在JS中可使用arguments參數,arguments是一個數組,存放的就是傳入的元素參數。
table.html的內容以下:
<!DOCTYPE html> <html> <head> <title>title</title> <style type="text/css"> #container{ height: 10000px } #nav{ height: 20px; width: 800px; font-size: 30px; color: red; } </style> </head> <body> <h1 name="th1">This is H1</h1> <div id="nav">nav</div> <div id="container"></div> <div>footer</div> </body> </html>