1. 程式人生 > 其它 >3:元素操作

3:元素操作

#強制
time.sleep(3)
#隱性等待(全域性等待-設定一次-在driver會話週期(開啟-關閉))在指定時間內完成,超過時間會有異常
dr.implicitly_wait(30)
#顯性等待
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


presence_of_element_located:元素存在
visibility_of_element_located:元素可見
element_to_be_clickable:元素可點選

WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.ID,'TANGRAM__PSP_10__footerULoginBtn')))

#1切換到iframes方式一
先檢視是否在iframes內--複製xpath相對路徑到搜尋框--顯示兩個html
//iframes先確定是哪個iframes(通過下標或name屬性唯一或xpath屬性)

三種定位切換
1:name
dr.switch_to.frame('login_frame_qq')
2:index(從一開始)
dr.switch_to.frame(3)
3:xpath
dr.switch_to.frame(dr.find_element_by_xpath("//iframe[@name='login_frame_qq']"))



#2切換到iframes方式二
切換後等待時間都做了
WebDriverWait(dr,10).until(EC.frame_to_be_available_and_switch_to_it('login_frame_qq'))

#從iframe退回
1:回到預設的頁面(頂層的html)
dr.switch_to.default_content()

2:回到上一級iframe
dr.switch_to.parent_frame()


#2切換視窗
#獲取全部的視窗控制代碼
print(dr.window_handles)
#當前瀏覽器控制代碼:
print(dr.current_window_handle)
#切換到指定控制代碼在操作頁面--最新視窗--需要等待
dr.switch_to.window(dr.window_handles[-1])
#新頁面等待控制元件存在
WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.ID,'j_head_focus_btn')))
dr.find_element_by_id('j_head_focus_btn').click()

#3彈窗
#訪問有直接本地彈出彈框的網址
dr.get('D:\\study\\WEB_AUTO\\test\\alert.html')
dr.find_element_by_xpath("//input[@type='button']").click()
#等待彈框的出現
WebDriverWait(dr,10).until(EC.alert_is_present())
#切換到alert
alert=dr.switch_to.alert
print(alert.text)
alert.accept()
# 取消
# alert.dismiss()

#4滑鼠操作(懸浮用的最多)
from selenium.webdriver import ActionChains
#1例項化ActionChains類獲得滑鼠物件
ac=ActionChains(dr)
#2將滑鼠操作新增到actions列表中--el是元素物件
el=dr.find_element(By.XPATH,'//span[@data-key="深圳"]')
ac.move_to_element(el)
3呼叫porform()來執行滑鼠操作
ac.perform()
綜合
ActionChains(dr).move_to_element(el).perform()

#5下拉框(index定位忽略)
from selenium.webdriver.support.select import Select

WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.XPATH,"//select[@name='ft']")))

select_ele=dr.find_element_by_xpath("//select[@name='ft']")
#獲得下拉框Select例項物件
s=Select(select_ele)

#下標
#s.select_by_index(5)
# #value值
#s.select_by_value('ppt')
# #文字內容
s.select_by_visible_text('Adobe Acrobat PDF (.pdf)')

#6鍵盤操作
from selenium.webdriver.common.keys import Keys

dr.find_element_by_id("kw").send_keys("seleniumm")
time.sleep(5)
#刪除一個
dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(5)
#全選
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(5)
#複製
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')
time.sleep(5)
#貼上
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#按回車
dr.find_element_by_xpath("//input[@id='su']").send_keys(Keys.ENTER)


#7.獲取控制元件屬性值
dr.find_element_by_xpath("//input[@id='su']").text
dr.find_element_by_xpath("//input[@id='su']").get_attribute('name')


#8.滾動條處理
#1:找到滾動條的控制元件
WebDriverWait(dr,10).until(EC.visibility_of_element_located((By.XPATH,"//div[@class='result-op c-container xpath-log']/h3/a")))
ele=dr.find_element_by_xpath("//div[@class='result-op c-container xpath-log']/h3/a")
#控制元件元素物件的頂端和視窗頂端對齊
dr.execute_script("arguments[0].scrollIntoView();",ele)
# 控制元件元素物件的底端和視窗底端對齊---一般
dr.execute_script("arguments[0].scrollIntoView(false);",ele)
#移動到頁面底端
dr.execute_script("window.scrollTo(0,document.body.scrollHeight)")
#移動到頁面頂端
dr.execute_script("window.scrollTo(document.body.scrollHeight,0)")

#9 js操作日曆
dr.get('https://www.12306.cn/index/')
#js語句---Console先確定可以用
js="var ele=document.getElementById('train_date');ele.readOnly=false;ele.value='2019-12-13';"
time.sleep(6)
dr.execute_script(js)

#10 上傳操作(下載pywin32,pypiwin32和spy++)
python3 -m pip install pywin32
設定中匯入pypiwin32

1.input標籤直接send_keys("路徑")
dr.find_element_by_xpath("//input[@type='file']").send_keys('D:\\jdk8\\README.html')
2.windows控制元件
#不同的瀏覽器的標題不一樣
dialog=win32gui.FindWindow('#32770','開啟')
#子視窗
#二級視窗
comboxex=win32gui.FindWindowEx(dialog,0,'ComboBoxEx32',None)
#三級視窗
combox=win32gui.FindWindowEx(comboxex,0,'ComboBox',None)
#四級視窗-Edit
edit=win32gui.FindWindowEx(combox,0,'Edit',None)
#開啟按鈕
button=win32gui.FindWindowEx(dialog,0,'Button','開啟(&O)')

#上傳操作(檔案路徑)
win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,'D:\\jdk8\\README.html')
#點選開啟按鈕上傳
win32gui.SendMessage(dialog,win32con.WM_COMMAND,1,button)