您好,登錄后才能下訂單哦!
這篇文章主要講解了“selenium庫的使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“selenium庫的使用方法”吧!
1.0、前期準備
首先我們需要安裝selenium庫,pip3 install selenium
其次我們還需要安裝并且配置好ChromeDriver,來對接Selenium。
安裝配置很簡單,只需要下載對應的版本后將chromedriver.exe文件復制python路徑下的Scripts路徑下即可。
2.0、配置完成后我們來簡單實例一下
webdriver.Chrome()表示創建一個chrome對象,會在電腦上打開瀏覽器
browser.get('https://www.baidu.com')get方法表示請求一個頁面,這里打開的是百度
print(browser.page_source)輸出獲取頁面的源代碼,即百度頁面的源代碼。
browser.close()關閉瀏覽器
其他:
browser.set_window_size(1400,800)設置瀏覽器的大小。
browser.refresh()刷新瀏覽器
clear()清除文本
獲取的百度源代碼圖:
3.0、我們在獲取到頁面后同樣需要獲取到節點,然后才能繼續后面的操作。繼續實例一下。
3.1首先分析頁面
如圖,我們在開發者模式中可以看待百度輸入框的class名為s_ipt,name名為wd,id名為kw。同樣的方式我們可以找到百度一下按鈕的class名為btn self-btn bg s_btn,id為su。
3.2、例如我們用類名來獲取節點并進行輸入:
browser.find_element_by_class_name('s_ipt')是利用class名獲取節點。
send_keys('selenium')輸入的值為selenium。
time.sleep(3)等3秒
btn=browser.find_element_by_id('su')獲取到百度一下按鈕。
btn.click()點擊該按鈕。
如果我們熟練了之后可以這樣寫browser.find_element_by_class_name('s_ipt').send_kes('selenium')獲取到輸入框并輸入內容。點擊按鈕同樣的方式也可。
獲取節點的方法還有幾種,我們來看一下。
find_element_by_class_name()通過class名來獲取。
find_element_by_id()通過id名來獲取。
find_element_by_name()通過屬性名來獲取。
find_element_by_xpath()通過xpath的方式獲取。
find_element_by_tag_name()通過節點名來獲取,比如input就是find_element_by_tag_name('input')
find_element_by_css_selector()通過css的方式獲取,不如id為kw就是find_element_by_css_selector('#kw'),
find_element_by_link_text()通過文本值來取,比如<a>123</a>:find_element_by_link_text('123')
find_element_by_partial_link_text()也是通過文本來取,partial的意思是部分的,所以比如<a>123</a>:find_element_by_partial_link_text('1')即可。
這樣寫,你可能會覺得很麻煩。當然也有一種通用的方法,
比如用id獲取可以這樣寫:find_element(By.ID,'kw')需要導入
from selenium.webdriver.common.by import By
第一個為獲取的方式,第二個為值。獲取的方式是原方法by_后的字母大寫就好,比如通class名獲取就可以是find_element(By.CLASS_NAME,'s_ipt')。
注意:以上方法只返回單個節點,如果符合要求的有多個節點,只返回第一個。
3.3、獲取多個節點:
直接將element改成elements就可以了,通用方法也一樣。
實例演示(打開百度輸入武漢景區,打印每一條的標題):
結果:
4.0、鼠標事件
4.1實例一下(打開百度,鼠標懸浮到更多產品):
首先需要導入
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(browser)用來構造ActionChains對象。
context_click(cp)將鼠標懸浮在某元素上。
perform()提交操作,不提交是沒有效果的。
其他:
move_to_element()右擊。
double_click()雙擊。
drag_and_drop()拖動。
context_click()模擬右鍵操作,需要元素定位。
注意:這里我用的是文本來定位,因為class名,id名在變化。
5.0、鍵盤操作
5.1、首先來說組合鍵:
send_keys(Keys.CONTROL,‘a’)Keys.CONTROL表示Ctrl鍵,所以就是ctrl+a
send_keys(Keys.CONTROL,‘c’)Keys.CONTROL表示Ctrl鍵,所以就是ctrl+c
其他都是一樣的,你懂的。
5.2、其他
send_keys(Keys.BACK_SPACE)刪除鍵(BackSpace)
send_keys(Keys.SPACE) 空格鍵(Space)
send_keys(Keys.TAB) 制表鍵(Tab)
send_keys(Keys.ESCAPE) 回退鍵(Esc)
send_keys(Keys.ENTER) 回車鍵(Enter)
6.0、獲取屬性,文本,id,位置,標簽名,大小,位置。
get_attribute()獲取屬性,比如獲取class,即get_attribute('class')
size 獲取元素大小
text 獲取元素文本
title 獲取當前頁面的title
current_url 獲取當前頁面的url
location 獲取元素的相對位置
tag_name 獲取標簽名
以百度為例:
結果圖:
7.0、切換表單
在Web應用中經常會遇到frame/iframe表單嵌套頁面的應用,Selenium打開頁面后默認在frame中找節點,也就是說,我們找不到iframe的節點。這時候需要:
switch_to.frame()先切換個iframe表單。參數可以填寫id和name屬性,如果沒有id和name,你也可以通過上面獲取節點的操作獲取節點,作為參數。
8.0、窗口切換
current_window_handle返回當前窗口的句柄
window_handles返回所有的窗口句柄
switch_to.window()跳轉窗口
實例:
9.0、延時等待(隱式等待和顯式等待)
為什么要等待?因為有時候頁面還沒有完全的加載不出,有些元素可能就獲取不到導致異常。
比如在百度頁面,點擊登錄后,再點擊立即注冊,如果不延時等待就會報錯(可以自己去試一下)
9.1隱式等待
implicitly_wait(10)表示在10秒內,只要有沒有找到的節點,在10秒內會一直尋找,超過就報異常。
9.2顯式等待
等待某個條件成立時繼續執行,否則在達到最大時長時拋出超時異常。
導入:from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 5, 0.5).until(
EC.presence_of_element_located((By.ID, "kw"))
)
dirver表示驅動
5表示等待的最長時間
0.5是每隔0.5秒檢測一次
until()方法用來傳入等待的條件
presence_of_element_located表示節點出現的意思
還有其他的判斷可以參考官方文檔。
10、前進和后退
back()后退
forward()前進
11、處理JavaScript所生成的alert、confirm
text 返回 alert/confirm/prompt 中的文字信息。
accept() 接受現有警告框。
dismiss() 解散現有警告框。
send_keys() 發送文本至警告框。
首先需要定位到js的彈窗
browser.switch_to.alert.accept()定位到彈窗執行確定也就是接收。
browser.switch_to.alert就是定位到彈窗。
12、窗口截圖
get_screenshot_as_file("E:\\1.jpg")
13、下拉框的操作
導入:from selenium.webdriver.support.select import Select
Select('定位').select_by_value(“選擇值”)直接定位到元素然后選擇就好
14、調用js代碼(比如下拉進度條,selenium并沒有提供方法)
首先利用設定
j="window.scrollTo(100,450);"
window.scrollTo()方法用于設置瀏覽器窗口滾動條的水平和垂直位置。
第一個參數就是水平位置,第二個參數就是垂直位置。
然后再利用browser.execute_script(j)方法去執行js代碼即可。
15、Cookies的操作
實例:
注意:以上browser都是我得命名,你可以修改成你的。
總結:以上很多方法我都沒有實例,關鍵是自己要敲代碼。
感謝各位的閱讀,以上就是“selenium庫的使用方法”的內容了,經過本文的學習后,相信大家對selenium庫的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。