selenium+python自動化,學習筆記二(窗口切換等)


1.多表單切換:

frame 嵌套頁面的應用,需要通過 switch_to_frame() 方法將當前定位的主體切換了 frame 里。
switch_to_frame() 默認可以直接取表單的 id name 屬性進行切換
例:
# 切換到 iframe(id = "if")
driver.switch_to_frame("if")
 
如果完成了在當前表單上的操作可以通過 switch_to_default_content()方法返回到上一層表單。 不用指定某個表單的返回,默認對應與它最近的 switch_to_frame()方法。

2.多窗口切換:switch_to_window()方法可以切換到任意的窗口。

例:

browser= webdriver.Firefox()
browser.implicitly_wait(10)
browser.get("https://www.baidu.com/")
#
獲得百度搜索窗口句柄

search = browser.current_window_handle

browser.find_element_by_xpath("//*[@id='u1']/a[7]").click()

browser.find_element_by_css_selector(".pass-fgtpwd").click()

#獲得當前打開所有窗口句柄

all_handles = browser.window_handles

#進入注冊窗口
for handle in all_handles:
if handle!=search:
browser.switch_to_window(handle)
print 'now register window'
browser.find_element_by_id("TANGRAM__PSP_8__userName").send_keys("username")
browser.find_element_by_id("TANGRAM__PSP_8__password").send_keys("password")
browser.find_element_by_id("TANGRAM__PSP_8__submit").click()

#進入搜索窗口

elif handle ==search:
browser.switch_to_window(handle)
print 'now search window'
browser.find_element_by_id("TANGRAM__PSP_2__closeBtn").click()
browser.find_element_by_id("kw").send_keys("test")
browser.find_element_by_id("su").click()
time.sleep(3)

3.警告框處理:

WebDriver 中處理 JavaScript 所生成的 alertconfirm 以及 prompt 是很簡單的。具體做法是使用 switch_to_alert()方法定位到 alert/confirm/prompt。然后使用 text/accept/dismiss/send_keys 按需進行操做。
text 返回 alert/confirm/prompt 中的文字信息。
accept 點擊確認按鈕。
dismiss 點擊取消按鈕,如果有的話。
send_keys 輸入值,這個alert\confirm沒有對話框就不能用了,不然會報錯。
4.上傳文件:
1)send_keys上傳:
對於通過 input 標簽實現的通過上傳,可以將其看作一個輸入框,通過 send_keys()傳入本地文件路徑 從而模擬上傳功能。
例:driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')
2)AutoIt上傳文件:
第三方插件,略
5.下載文件

為了讓 FireFox 讓瀏覽器能實現文件的載,我們需要通過 FirefoxProfile() 對其參數做一個設置。

browser.download.folderList設置成 0 代表下載到瀏覽器默認下載路徑;設置成 2 則可以保存到指定目錄。

browser.download.manager.showWhenStarting是否顯示開始,Ture 為顯示,Flase 為不顯示。

browser.download.dir 用於指定你所下載文件的目錄。os.getcwd() 該函數不需要傳遞參數,用於返回當前的目錄。

browser.helperApps.neverAsk.saveToDisk指定要下載頁面的 Content-type 值,“application/octet-stream”為文件的類型。HTTP Content-type 常 用對照表:http://tool.oschina.net/commons

這些參數的設置可以通過在 Firefox 瀏覽器地址欄輸入:about:config 進行設置

#coding=utf-8
from selenium import webdriver
import os
fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)

fp.set_preference("browser.download.manager.showWhenStarting",False)

fp.set_preference("browser.download.dir", os.getcwd())

fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")

#下載文件的類型

driver = webdriver.Firefox(firefox_profile=fp)

driver.get("http://pypi.Python.org/pypi/selenium")

driver.find_element_by_partial_link_text("selenium-2").click()

6.操作cookie:
  •  get_cookies() 獲得所有cookie信息

  •  get_cookie(name) 返回有特定 name 值有 cookie 信息

  •  add_cookie(cookie_dict) 添加 cookie,必須有 name value

  •  delete_cookie(name) 刪除特定(部分)cookie信息 刪除所有cookie信息

  •  delete_all_cookies() 下面通過 get_cookies()來獲取當前瀏覽器的 cookie 信息

例:
cookie = driver.get_cookies()
driver.add_cookie({'name':'11111','value':'22222'})
print cookie
for cookie in driver.get_cookies():
print "%s ->%s" % (cookie['name'],cookie['value'])

 

6.調用java script

WebDriver提供了execute_script()方法 來執行 JavaScript 代碼

#將頁面滾動條拖到底部
js="var q=document.documentElement.scrollTop=10000"

driver.execute_script(js)
time.sleep(3)

#將滾動條移動到頁面的頂部
js_="var q=document.documentElement.scrollTop=0"

driver.execute_script(js_)
time.sleep(3)

7.窗口截圖:
driver.get_screenshot_as_file("D:\\baidu_error.jpg")
8.關閉窗口:

close()和qiut()

9.驗證碼處理:

1)去掉驗證碼:

2)設置萬能碼:

例: #coding=utf-8
import random

#生成一個 1000 9999 之間的隨機整數

verify = random.randint(1000,9999)

print u"生成的隨機數:%d " %verify

number = input(u"請輸入隨機數:")

print number

if number == verify:

  print u"登錄成功!!"

elif number == 132741:

  print u"登錄成功!!"

else:
  print u"
驗證碼輸入有誤!"

3)驗證碼識別技術:

可以通過 Python-tesseract 來識別圖片驗證碼

4)記錄cookie:

可以通過 add_cookie()方法將用戶名密碼寫入瀏覽器 cookie ,再次訪問網站時服務器直接讀取瀏覽器 Cookie 登錄。

 



 



 

 

 

 

 

 

 


免責聲明!

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



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