selenium常用API的使用過(guò)程記錄(包括自動(dòng)登錄)
什么是Selenium
Selenium是一個(gè)自動(dòng)化測(cè)試工具,對(duì)各種瀏覽器都能很好地支持,包括Chrome、Firefox這些主流瀏覽器。使用它就可以模擬瀏覽器進(jìn)行各種各樣的操作,包括爬取一些網(wǎng)頁(yè)內(nèi)容。當(dāng)你看到瀏覽器自己運(yùn)行并且在網(wǎng)頁(yè)上翻頁(yè)或者跳轉(zhuǎn)的時(shí)候,應(yīng)該會(huì)覺(jué)得很有趣的。
安裝selenium先安裝好Selenium庫(kù)和對(duì)應(yīng)瀏覽器的WebDriver驅(qū)動(dòng),比如我用的是Chrome,則相對(duì)應(yīng)安裝的是ChromeDriver。
1.安裝selenium # 打開(kāi)命令控制符執(zhí)行 pip install selenium
2.我的Google Chrome 已是最新版本版本 74.0.3729.108(正式版本) (64 位)
安裝三大瀏覽器驅(qū)動(dòng)driver
1.chromedriver 下載地址:http://chromedriver.storage.googleapis.com/index.html?path=74.0.3729.6/
2.Firefox的驅(qū)動(dòng)geckodriver 下載地址:https://github.com/mozilla/geckodriver/releases/
3.IE的驅(qū)動(dòng)IEdriver 下載地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver/
注意:64位向下兼容,直接下載32位的就可以啦,親測(cè)可用。chromedriver_win32.zip
D:\Python\python\Scripts
.粘貼chromedriver.exe到文件d:\Python37\Scripts路徑下。
如果Chrome問(wèn)題閃退 ,不兼容問(wèn)題!
為什么要使用selenium?
selenium是一個(gè)自動(dòng)測(cè)試工具,它可以幫我通過(guò)代碼去實(shí)現(xiàn)驅(qū)動(dòng)瀏覽器自動(dòng)執(zhí)行相應(yīng)的操作。所以我們也可以用它來(lái)做爬蟲。主要使用selenium的目的是為了跳過(guò)登錄驗(yàn)證。
Python的selenium爬蟲的簡(jiǎn)單使用過(guò)程記錄
0.預(yù)先準(zhǔn)備
~首先下載谷歌瀏覽器,然后點(diǎn)擊設(shè)置選項(xiàng)那里的幫助—關(guān)于Google Chrome,點(diǎn)進(jìn)去看瀏覽器的版本號(hào),或者在谷歌瀏覽器輸入chrome://version/ 進(jìn)行查看;
~然后下載驅(qū)動(dòng),驅(qū)動(dòng)地址:http://chromedriver.storage.googleapis.com/index.html
~將驅(qū)動(dòng)chromedriver.exe所在的文件夾的路徑添加到電腦的環(huán)境變量中,或者直接放在py文件運(yùn)行的目錄下
1.導(dǎo)入selenium 庫(kù)
from selenium import webdriver
2.設(shè)置參數(shù)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('prefs', {'profile.default_content_setting_values': {'images': 2, }}) # 設(shè)置瀏覽器無(wú)圖片模式
chrome_options.add_argument(f'--proxy-server=200.200.200.52:8888') #設(shè)置代理ip,這個(gè)是我隨便寫的ip3.實(shí)例化
chrome = webdriver.Chrome(options=chrome_options) # 創(chuàng)建selenium實(shí)例化
4.輸入網(wǎng)址
chrome.get('https://www.baidu.com/')5.定位元素
chrome.find_element_by_xpath('//*[@id="kw"]') #定位好元素,主要是卻定要做什么,這一步可以不要
chrome.find_element_by_xpath('//*[@id="kw"]') .send_keys('白某人') #send_keys 主要是用來(lái)在輸入框輸入內(nèi)容
chrome.find_element_by_link_text('百度一下').click() # click 方法是點(diǎn)擊
#定位元素的方法有很多,但是要注意點(diǎn)的是find_element 后面有沒(méi)有s,有s的話是返回一個(gè)列表的6.關(guān)閉瀏覽器
chrome.close()
常用API
初始化WebDriver
首先,我們需要?jiǎng)?chuàng)建一個(gè)WebDriver實(shí)例,它是與瀏覽器進(jìn)行交互的主要接口。
from selenium import webdriver
driver = webdriver.Chrome('/path/to/chromedriver') # 若已設(shè)置環(huán)境變量,可省略路徑打開(kāi)和關(guān)閉網(wǎng)頁(yè)
driver.get('https://www.example.com') # 打開(kāi)網(wǎng)頁(yè)
print(driver.title) # 獲取網(wǎng)頁(yè)標(biāo)題
driver.quit() # 關(guān)閉瀏覽器并退出WebDriver會(huì)話查找元素
在網(wǎng)頁(yè)中查找元素是自動(dòng)化過(guò)程的基礎(chǔ)。
from selenium.webdriver.common.by import By element_by_id = driver.find_element(By.ID, 'some-id') element_by_name = driver.find_element(By.NAME, 'some-name') element_by_xpath = driver.find_element(By.XPATH, '//div[@class="some-class"]') element_by_css = driver.find_element(By.CSS_SELECTOR, 'div.some-class')
與元素進(jìn)行交互
找到元素后,我們可以與它進(jìn)行各種交互,如點(diǎn)擊、輸入文本等。
# 輸入文本
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium')
# 點(diǎn)擊按鈕
search_button = driver.find_element(By.NAME, 'btnK')
search_button.click()
# 清空文本框
search_box.clear()等待元素
Web自動(dòng)化中,等待某個(gè)條件的成立是常見(jiàn)需求,以確保元素已加載。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 顯示等待
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'some-id'))
)
# 隱式等待
driver.implicitly_wait(10) # 設(shè)置全局等待時(shí)間處理下拉菜單
下拉菜單是表單常見(jiàn)元素,Selenium提供了Select類來(lái)處理它們。
from selenium.webdriver.support.ui import Select
select_element = driver.find_element(By.ID, 'dropdown')
select_object = Select(select_element)
select_object.select_by_index(1) # 通過(guò)索引選擇
select_object.select_by_value('value') # 通過(guò)value屬性選擇
select_object.select_by_visible_text('Text') # 通過(guò)可見(jiàn)文本選擇執(zhí)行JavaScript
有時(shí)直接使用JavaScript執(zhí)行操作是必要的。
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') # 滾動(dòng)到底部處理Alerts、Frames和Windows
Selenium可以處理JavaScript彈窗、iFrames和新窗口。
# 處理Alert彈窗
alert = driver.switch_to.alert
alert_text = alert.text
alert.accept() # 點(diǎn)擊'OK'
# 切換到iFrame
driver.switch_to.frame('frameName')
# 切換回主文檔
driver.switch_to.default_content()
# 切換窗口
driver.switch_to.window(driver.window_handles[1])獲取屬性和CSS屬性
有時(shí)我們需要獲取元素的屬性或者CSS屬性。
attr_value = element.get_attribute('href')
css_value = element.value_of_css_property('color')利用Selenium進(jìn)行自動(dòng)登錄
以下是一個(gè)利用Selenium進(jìn)行自動(dòng)登錄的例子。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome('/path/to/chromedriver')
driver.get('https://www.somewebsite.com/login')
# 填寫用戶名和密碼
username = driver.find_element(By.ID, 'username')
password = driver.find_element(By.ID, 'password')
username.send_keys('your_username')
password.send_keys('your_password')
# 點(diǎn)擊登錄
login_button = driver.find_element(By.ID, 'submit')
login_button.click()
# 等待登錄成功的頁(yè)面元素加載
wait = WebDriverWait(driver, 10)
logged_in_element = wait.until(EC.presence_of_element_located((By.ID, 'logged-in-message')))
print('登錄成功!')
# 執(zhí)行后續(xù)的自動(dòng)化操作...
# 關(guān)閉瀏覽器
driver.quit()在這個(gè)例子中,我們自動(dòng)化了登錄過(guò)程,包括填寫認(rèn)證信息和提交表單,然后等待登錄成功消息的出現(xiàn)。
總結(jié)
Selenium是Python爬蟲和自動(dòng)化測(cè)試領(lǐng)域的強(qiáng)大工具。本篇博客中我們介紹了Selenium的常用API,這些API能幫助你模擬幾乎所有的瀏覽器操作,從而使你能夠構(gòu)建出功能強(qiáng)大的自動(dòng)化腳本。掌握這些API是提高爬蟲效率和應(yīng)對(duì)復(fù)雜頁(yè)面的關(guān)鍵。
相關(guān)文章
Python EOL while scanning string literal問(wèn)題解決方法
這篇文章主要介紹了Python EOL while scanning string literal問(wèn)題解決方法,本文總結(jié)出是數(shù)據(jù)庫(kù)數(shù)據(jù)出現(xiàn)問(wèn)題導(dǎo)致這個(gè)問(wèn)題,需要的朋友可以參考下2015-04-04
如何利用pandas將Excel轉(zhuǎn)為html格式
工作中經(jīng)常會(huì)遇到Excel轉(zhuǎn)為html格式這種需求,下面這篇文章主要給大家介紹了關(guān)于如何利用pandas將Excel轉(zhuǎn)為html格式的相關(guān)資料,主要利用的是pd.to_html,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08
python中的easy_install工具,類似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan,那是相當(dāng)?shù)乃嵬崃巳绻胧褂?/div> 2013-02-02
python web應(yīng)用程序之Django數(shù)據(jù)庫(kù)詳解
這篇文章主要介紹了python web應(yīng)用程序之Django數(shù)據(jù)庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
對(duì)Python3之方法的覆蓋與super函數(shù)詳解
今天小編就為大家分享一篇對(duì)Python3之方法的覆蓋與super函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python使用openpyxl庫(kù)處理Excel文件詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于python使用openpyxl庫(kù)處理Excel文件詳細(xì)教程的相關(guān)資料,openpyxl屬于第三方模塊,在python中用來(lái)處理excel文件,可以對(duì)excel進(jìn)行的操作有讀寫、修改、調(diào)整樣式及插入圖片等,需要的朋友可以參考下2023-11-11
Python中的google authenticator認(rèn)證過(guò)程
文章介紹了使用Python 3.7生成Google Authenticator所需密鑰的步驟,包括使用pyotp模塊生成密鑰、生成二維碼圖片以及通過(guò)客戶端掃描二維碼進(jìn)行二次認(rèn)證的實(shí)現(xiàn)原理2024-11-11
python中數(shù)據(jù)庫(kù)like模糊查詢方式
這篇文章主要介紹了python中數(shù)據(jù)庫(kù)like模糊查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
python?sklearn?畫出決策樹(shù)并保存為PDF的實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了python?sklearn?畫出決策樹(shù)并保存為PDF的實(shí)現(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07最新評(píng)論

