Python模塊之selenium的簡單使用


1、selenium介紹

selenium最初是一個自動化測試工具,模擬用戶的操作。
而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript代碼的問題 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之后的結果,可支持多種瀏覽器,包括headless,可以在各種平台使用。

 

2、安裝准備

#導入模塊
from selenium import webdriver 

下載應用程序與對應的驅動,這里以Windows平台為例,下載Chrome瀏覽器和對應的瀏覽器驅動

下載Chrome瀏覽器:https://www.google.cn/chrome/

查看驅動和瀏覽器版本的映射關系:http://blog.csdn.net/huilan_same/article/details/51896672

下載對應的驅動程序:http://chromedriver.storage.googleapis.com/index.html

 

3、selenium操作

3.1.簡單使用

 

from selenium import webdriver
#加載相應瀏覽器的驅動文件
#這會到的一個瀏覽器的示例對象,每實例化一個對象,都會打開一個新的瀏覽器
driver=webdriver.Chrome(r'./chromedriver.exe')
#打開一個新的頁面,默認多個請求鏈接會被覆蓋,只顯示最后一個請求
page=driver.get('https://www.baidu.com/')
#關閉瀏覽器
driver.quit()

 

3.2元素定位

元素定位
find_element_by_name  find_elements_by_name 通過元素name定位
find_element_by_id find_elements_by_id 通過元素id定位
find_element_by_xpath find_elements_by_xpath 通過xpath表達式定位
find_element_by_link_text find_elements_by_link_text 通過完整超鏈接定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通過部分鏈接定位
find_element_by_tag_name find_elements_by_tag_name 通過標簽定位
find_element_by_class_name find_elements_by_class_name 通過類名進行定位
find_elements_by_css_selector find_elements_by_css_selector 通過css選擇器進行定位

 find_element_by_xxx找的是第一個符合條件的標簽,find_elements_by_xxx找的是所有符合條件的標簽。

from selenium import webdrive
from time import sleep
#加載相應瀏覽器的驅動文件
#這會到的一個瀏覽器的示例對象,每實例化一個對象,都會打開一個新的瀏覽器
driver=webdriver.Chrome(r'./chromedriver.exe')
#打開一個新的頁面,默認多個請求鏈接會被覆蓋,只顯示最后一個請求
page=driver.get('https://www.baidu.com/')
driver.maximize_window()  # 將瀏覽器最大化,有界面的情況下正常

#通過文字定位
# driver.find_element_by_link_text('新聞').click()
#等同於
# driver.find_elements_by_link_text('新聞')[0].click()
# sleep(2)

#通過xpath定位
# driver.find_element_by_xpath('//*[@id="s-top-left"]/a[1]').click()
# sleep(2)

#通過類名定位,當類名有多個相同時,需要find_elements_by_class_name
# driver.find_elements_by_class_name('c-color-t')[0].click()
# sleep(2)

#通過選擇器定位
# driver.find_elements_by_css_selector('.c-color-t')[0].click()
# sleep(2)

#關閉瀏覽器
driver.quit()

 3.3.模擬登錄

from selenium import webdriver
import time
#加載相應瀏覽器的驅動文件
driver=webdriver.Chrome(r'./chromedriver.exe')
#打開一個新的頁面
page=driver.get('http://admin.syrinx2008.com/Admin/Members/pageList/m_type/1.html')
driver.maximize_window()  # 將瀏覽器最大化,有界面的情況下正常

# 輸入用戶名
username_input=driver.find_element_by_id('phone')
username_input.send_keys('YOUR NAME')
time.sleep(2)
#輸入密碼
password_imput=driver.find_element_by_id('password')
password_imput.send_keys('YOUR PWD')
time.sleep(2)
#手動輸入驗證碼
code_input=input('請輸入驗證碼:').strip()
driver.find_element_by_id('code').send_keys(code_input)
time.sleep(2)
#點擊登錄
login_btn=driver.find_element_by_xpath('//ul/li[@class="subBtn"]/a')
login_btn.click()
time.sleep(5)

#頁面數據
page_text = driver.page_source
print(len(page_text))
# with open(r'./file/sq_index.html',mode='wt',encoding='utf-8') as f:
#     f.write(page_text)

#頁面截圖
driver.save_screenshot(r'file/1.png')

#關閉瀏覽器
driver.quit()

注意:當實例化的瀏覽器對象driver是一個局部變量時,會隨着函數的執行結束而回收。當元素定位可能會產生異常時候,處理異常需要關閉瀏覽器,釋放資源。

 

4、headless配置

在實例化一個操作對象的時候,selenium會幫助我們打開一個瀏覽器窗口。headless配置會隱藏這個窗口打開,提高執行效率。無界面的Linux系統中,必須配置headless。

 

from selenium import webdriver from selenium.webdriver.chrome.options import Options #構造一個配置參數對象
chrome_options = webdriver.ChromeOptions() # 最大化運行(全屏窗口),不設置,取元素會報錯
chrome_options.add_argument('--window-size=1960,1080') chrome_options.add_argument('--start-maximized') chrome_options.add_argument('--no-sandbox')  #Linux系統需要配置
chrome_options.add_argument('--disable-infobars')  # 禁用瀏覽器正在被自動化程序控制的提示
chrome_options.add_argument('--incognito')  # 隱身模式(無痕模式)
chrome_options.add_argument('--headless')  # 瀏覽器不提供可視化頁面

print('正在啟動無窗口瀏覽器。。。') #構成瀏覽器操作對象,傳入驅動程序與配置對象
driver = webdriver.Chrome(settings.DRIVER,options=chrome_options) ''' 業務操作 '''
driver.quit()

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM