selenium基本

weixin_50244954發表於2020-10-19

selenium詳解

from selenium import webdriver
import time
#建立一個瀏覽器
driver = webdriver.Chrome()

#瀏覽器最大化
driver.maximize_window()
# #最小化瀏覽器
# driver.minimize_window()

# #開啟指定的網頁(URL就是指網址)
driver.get("http://www.baidu.com")

#定位內容文字框
textElement = driver.find_element_by_id("kw")
#輸入內容
textElement.send_keys("五洲 趙靜")

#定位 百度一下 按鈕
buttonElement = driver.find_element_by_id('su')
#點選
buttonElement.click()

獲取輸入框的值

元素文字的值

from selenium import webdriver
import time
#建立一個瀏覽器
driver = webdriver.Chrome()

#瀏覽器最大化
driver.maximize_window()
# #最小化瀏覽器
# driver.minimize_window()

# #開啟指定的網頁(URL就是指網址)
driver.get("http://www.baidu.com")

# #定位內容文字框
# textElement = driver.find_element_by_id("kw")
# #輸入內容
# textElement.send_keys("五洲 趙靜")

#選擇 輸入框 然後獲取輸入框 的name 屬性的值
# name = driver.find_element_by_id("kw").get_attribute("class")
# print(name)

#判斷元素是否可見  返回的是 T 或者 F
tf = driver.find_element_by_id("kw").is_displayed()
print(tf)

# #定位 百度一下 按鈕
# buttonElement = driver.find_element_by_id('su')
# #點選
# buttonElement.click()

#text獲取元素的文字內容
# driver.find_element_by_id("s-bottom-layer-right").text

# <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

#關閉瀏覽器
driver.quit()

元素定位顯示等待隱式等待,滑鼠操作

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
#開啟瀏覽器
driver = webdriver.Firefox()
#等待頁面載入,操作10s報出異常
driver.implicitly_wait(10)
driver.maximize_window()

#開啟網址
driver.get("http://www.baidu.com")

#定位 設定 按鈕
# st = driver.find_element_by_id("s-usersetting-top")

#ActionChains中需要指定要操作的driver,move_to_element後面要寫讓在那個元素上懸停,而perform()可以看成是提交這次操作
# ActionChains(driver).move_to_element(st).perform()


#在搜尋框設定滑鼠右鍵操作
# sd = driver.find_element_by_id("kw")
# ActionChains(driver).context_click(sd).perform()

#拖動
# baidu = driver.find_element_by_xpath('//ul[@id="hotsearch-content-wrapper"]/li[1]')
# ActionChains(driver).drag_and_drop(baidu, sd).perform()

#滑鼠 雙擊 操作
driver.find_element_by_id('kw').send_keys("馬大師")
# 雙擊 百度一下 按鈕
baudubutto = driver.find_element_by_id('su')
ActionChains(driver).double_click(baudubutto).perform()

鍵盤操作

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()

#開啟網頁
driver.get("http://www.baidu.com")

#定位輸入框 輸入內容
driver.find_element_by_id("kw").send_keys("美團外賣")

time.sleep(3)

#刪除多輸入的 數字2
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)

# 空格Keys.SPACE
# driver.find_element_by_id("kw").send_keys(Keys.SPACE)
# driver.find_element_by_id("kw").send_keys("接新單了")

# #全選
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
#
# #剪下
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
# time.sleep(2)
#
# #貼上
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
#
# #回車操作
# driver.find_element_by_id("kw").send_keys(Keys.ENTER)

顯示等待

#元素等待:顯示等待 隱式等待
#顯示等待是等待載入頁面上的單個元素,顯示等待一般應用在介面查詢內容比較多,載入時間特別長的時間
#隱式等待是等整個頁面全部載入完成  implicitly_wait(10)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#開啟瀏覽器
driver = webdriver.Firefox()
#等待頁面載入,操作10s報出異常
driver.implicitly_wait(10)  #隱式等待
driver.maximize_window()

driver.get("http://www.baidu.com")

#顯示等待:driver 代表的是瀏覽器物件,10代表的時候最大超時時間,超過10s就報錯,0.5s指定的是步長預設就是0.5 可以不寫,
#(By.ID, 'kw') 元素定位的方式和內容,要寫在一個元組中傳遞給presence_of_element_located
a = WebDriverWait(driver, 10, 0.5).until(EC.presence_of_element_located((By.ID, 'kw')))
a.send_keys('王二麻子')

切換控制程式碼

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()

driver.get("https://www.jd.com/")

#獲取當前視窗的控制程式碼  控制程式碼就像視窗的身份證一樣可以唯一的標識我們的視窗
jdhandle = driver.current_window_handle


#點選 酒店
driver.find_element_by_css_selector('ul[class="J_tab_head service_list"] a[href="//hotel.jd.com/"]').click()

#獲取當前瀏覽器所有的視窗控制程式碼 視窗控制程式碼存放在列表中
winhands = driver.window_handles
print(winhands)

#方法一:在點選酒店後會產生兩個視窗,我們和剛開始開啟的視窗控制程式碼判斷,如果不相等則是剛開啟的視窗
# #切換控制程式碼
# for one in winhands:
#     if one == jdhandle:
#         continue
#     else:
#         #切換到新開啟的視窗控制程式碼
#         driver.switch_to.window(one)
#         #進入酒店選擇介面 輸入城市
#         driver.find_element_by_id('city').clear()
#         driver.find_element_by_id('city').send_keys("西安")
#         #點選
#         driver.find_element_by_xpath('//ul[@class="suggest-ul"]/li[1]').click()
#
#         time.sleep(3)
#         #點選 搜尋酒店 按鈕
#         driver.find_element_by_id("searchBtn").click()

#方法二:獲取所有的視窗的控制程式碼是存在列表中,列表中的最後一個元素就是新開啟的視窗的控制程式碼
driver.switch_to.window(winhands[-1])
#進入酒店選擇介面 輸入城市
driver.find_element_by_id('city').clear()
driver.find_element_by_id('city').send_keys("西安")
#點選
driver.find_element_by_xpath('//ul[@class="suggest-ul"]/li[1]').click()

time.sleep(3)
#點選 搜尋酒店 按鈕
driver.find_element_by_id("searchBtn").click()

斷言模組加酒店案列

#京東商城 練習 按照條件篩選獲取所有的酒店 名字

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
##斷言模組EC
from selenium import webdriver
import time


driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()

driver.get("https://www.jd.com/")

#獲取當前視窗的控制程式碼  控制程式碼就像視窗的身份證一樣可以唯一的標識我們的視窗
jdhandle = driver.current_window_handle


#點選 酒店
driver.find_element_by_css_selector('ul[class="J_tab_head service_list"] a[href="//hotel.jd.com/"]').click()

#獲取當前瀏覽器所有的視窗控制程式碼 視窗控制程式碼存放在列表中
winhands = driver.window_handles


#方法二:獲取所有的視窗的控制程式碼是存在列表中,列表中的最後一個元素就是新開啟的視窗的控制程式碼
driver.switch_to.window(winhands[-1])

#關閉廣告: 這個地方設定顯示等待的原因為讓頁面元素完成載入
element_locat = WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'i[class="close"]')))
element_locat.click()



#進入酒店選擇介面 輸入城市
driver.find_element_by_id('city').clear()
driver.find_element_by_id('city').send_keys("西安")
#點選
driver.find_element_by_xpath('//ul[@class="suggest-ul"]/li[1]').click()

#選擇入住 時間
driver.find_element_by_id('dateStart').click()
driver.find_element_by_xpath('//div[@class="ui-jm-calendar ui-calendar-3"]/div[2]//tbody/tr[5]/td[5]').click()

#離店日期
driver.find_element_by_xpath('//div[@class="ui-jm-calendar ui-calendar-4"]/div[2]//tbody/tr[1]/td[4]').click()

#選擇 商圈
driver.find_element_by_id('hotelKeys').send_keys("鐘樓")
#點選 選擇
driver.find_element_by_xpath('//body/div[@class="suggest"][2]//li[2]').click()

#點選 搜尋酒店 按鈕
driver.find_element_by_id("searchBtn").click()

#driver瀏覽器物件, 20s 最大超時時間, 0.5 間隔步長  ()  設定顯示等待 判斷頁面是否載入完成,這個元素找到了再去獲取頁面資訊
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.total')))

#獲取酒店名字
titename = driver.find_elements_by_css_selector('.p-name')
for one in titename:
    print(one.text)

相關文章