安裝
pip install selenium
使用 (以chrome瀏覽器為例)
1.導入: from selenium import webdriver
方法一: 將下載好的chrome瀏覽器驅動文件加入到python目錄下
browser = webdriver.Chrome() # 默認路徑為python環境目錄
方法二:指定chrome瀏覽器驅動文件路徑
chromedriver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver'
browser = webdriver.Chrome(chromedriver)
3.打開瀏覽器網頁訪問url
打開網頁:
browser.get('https://www.taobao.com')
關閉網頁窗口,並退出瀏覽器:
driver.close() # 關閉瀏覽器窗口
driver.quit() # 退出瀏覽器
4.獲取元素
a. 獲取單個元素:
find_element_by_name()是根據Name值獲取
ind_element_by_id()是根據ID獲取
find_element_by_xpath()是根據Xpath提取
find_element_by_css_selector('#xxx') # id : #xxx class: .xxx
driver.find_element_by_link_text('賬號登錄') # 通過鏈接的文本取元素
其他方法:
from selenium.webdriver.common.by import By
find_element_by_id(id)
就等價於find_element(By.ID, id)
find_element_by_css_selector('#xxx')
等價於find_elements(By.CSS_SELECTOR, '.service-bd li')
b.獲取多個元素
find_elements_by_css_selector('#xxx li') # 根據id=xxx來獲取下面的所有li的結果
5.前進后退
browser.back() #后退
time.sleep(1)
browser.forward() #前進
6.切換窗口
driver.execute_script('window.open()') # 執行js代碼, window.open():打開一個空頁面
browser.current_window_handl) # 當前窗口
browser.window_handles # 所有窗口列表
browser.switch_to.window(browser.window_handles[1]) #切換到指定窗口
7.模擬登陸CSDN
import time
from selenium import webdriver
driver = webdriver.Chrome() # chrome驅動文件在默認目錄python目錄下
driver.get('https://passport.csdn.net/login')
login = driver.find_element_by_link_text('賬號登錄') # 通過鏈接的文本取元素
login.click()
time.sleep(1)
username = driver.find_element_by_id('username')
username.send_keys('用戶名') # 輸入賬號
pwd = driver.find_element_by_id('password')
pwd.send_keys('密碼') # 輸入密碼
login_btn = driver.find_element_by_css_selector('.btn.btn-primary')
login_btn.click()
8.截圖
driver.save_screenshot('csdn.png')
9.獲取網頁源碼
driver.page_source()
# 遇到隨滾輪滑動動態加載的頁面,需要模擬滾輪滑動到底部后,再獲取源碼, 滑動速度不能太快,每次滑動一段距離即可.
10.實現拖拽效果
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
actions = ActionChains(driver)
driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
# 切換iframe iframe是一個獨立新窗口,需切換
driver.switch_to.frame('iframeResult')
draggable = driver.find_element_by_id('draggable')
droppable = driver.find_element_by_id('droppable')
actions.drag_and_drop(draggable, droppable)
actions.perform()
# time.sleep(3)
# driver.quit()
11.滾動效果
滾動條下拉到底
#方法1
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 0到頁面最大高度
#方法2
driver.execute_script("document.documentElement.scrollTop=10000")
12.谷歌無頭模式
options = webdriver.ChromeOptions() # chrome配置選項
options.add_argument('headless') # 添加無頭模式參數
driver = webdriver.Chrome(options=options)
13.執行js語句
driver.execute_script()
方法如果有返回值,有以下幾種情況:
1、如果返回一個頁面元素(document element), 這個方法就會返回一個WebElement
2、如果返回浮點數字,這個方法就返回一個double類型的數字
3、返回非浮點數字,方法返回Long類型數字
4、返回boolean類型,方法返回Boolean類型
5、如果返回一個數組,方法會返回一個List<Object>
6、其他情況,返回一個字符串
7、如果沒有返回值,此方法就會返回null
例:
distance = driver.execute_script('var distance=document.body.scrollHeight;return distance;') # 獲取頁面高度
需要返回值時, js代碼必須 return 該返回值
14.cookies操作
# 獲取所有cookies信息
driver.get_cookies()
# 添加一個cookie信息
driver.add_cookie({'name': 'lisi', 'age': 18}) # 添加的cookie必須是字典形式
# 可以將get_cookies() 獲取的 cookies 遍歷添加進去
# 刪除所有cookies
driver.delete_all_cookies()