1.webdriver提供的8種頁面元素定位方法:javascript
from selenium.webdriver.common.keys importKeys
...
dr.get("http://www.baidu.com")
#輸入內容
dr.find_element_by_id("kw").send_keys("seleniumm")
#刪除輸入內容的最後一個字母,
dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#輸入:空格+教程
dr.find_element_by_id("kw").send_keys(Keys.SPACE)
dr.find_element_by_id("kw").send_keys(u"教程")
#ctrl+a全選輸入框內容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#ctrl+x剪貼輸入框內容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#ctrl+v剪貼輸入框內容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#回車鍵操做
dr.find_element_by_id("su").send_keys(Keys.ENTER)
dr.close()
dr.titledr.current_urldr.find_element_by_id("xx").text
WebDriverWait(driver, timeout,poll_frequency,ignored_exceptions=None).until(method,message)示例:WebDriverWait(dr,5,0.5,None).until(expected_conditions.presence_of_element_located((By.ID,"kw1")),message='test')解釋:A.WebDriverWait():在設置時間內,默認間隔一段時間檢測一次當前頁面元素是否存在,若超過當前指定時間檢測不到則拋出異常;B.driver:webdriver的瀏覽器驅動,ie、firefox、chromeaC.timeout:最長超時時間,以秒爲單位D.poll_frequency:休眠間隔時間-步長,默認0.5秒E.ignored_exceptions:超時後異常信息,默認拋出NoSuchElementException異常F.until(method,message): 調用該方法提供的驅動做爲一個參數,直到返回值爲TrueG.until_not(method,message):調用該方法提供的驅動做爲一個參數,直到返回值爲FalseH.expected_conditions類提供的預期條件實現有:title_is:判斷標題是不是xxtitle_contains:判斷標題是否包含xxpresence_of_element_located:元素是否存在
visibility_of_element_located:元素是否存在
visibility_of:是否可見
presence_of_all_elements_located:判斷一組元素是否存在
text_to_be_present_in_element:判斷元素是否有xx文本信息
text_to_be_present_in_element_value:判斷元素值是否有xx文本信息
frame_to_be_available_and_switch_to_it:表單是否可見,並切換到該表單
invisibility_of_element_located:判斷元素是否隱藏element_to_be_clickable:判斷元素是否點擊,它處於可見和啓動狀態staleness_of:等到一個元素再也不依附於DOMelement_to_be_selected:被選中的元素element_located_to_be_selected:一個指望的元素位於被選中element_selection_state_to_be:一個指望檢查若是給定元素被選中element_located_selection_state_to_be:指望找到一個元素並檢查是不是選擇狀態alert_is_present:預期一個警告信息
<styletype="text/css">
body{font-size:12px; font-family:Tahoma;}
.checkbox{vertical-align:middle; margin-top:0;}
</style>
<body>
<inputclass="checkbox"type="checkbox"/>元旦
<inputtype="checkbox"name="test"/>聖誕節
<inputtype="checkbox"name="test"/>股市
<inputtype="checkbox"name="test"/>阿凡達
<inputtype="checkbox"name="test"/>十月圍城
<inputtype="checkbox"name="test"/>水價上調
<inputtype="button"value="檢測"id="btn"/>
</body>
dr=webdriver.Firefox()
dr.get("D:\\workspace\\pySelenium\\resources\\checkbox.htm")
#使用tagname方式選擇頁面上全部tagname爲input的元素
select_tagname=dr.find_elements_by_tag_name("input")
#使用xpath方式選擇頁面上全部tagname爲input的元素
select_xpath=dr.find_elements_by_xpath("//input[@type='checkbox']")
#使用css_select方式選擇頁面上全部tagname爲input的元素
select_css=dr.find_elements_by_css_selector('input[type=checkbox]')
for i in select_tagname:
#循環對每一個input元素進行點擊選中操做
if i.get_attribute("type")=='checkbox':
i.click()
for j in select_xpath:
#循環對每一個input元素進行點擊取消操做
j.click()
for k in select_css:
#循環對每一個input元素進行點擊選中操做
k.click()
#打印出checkbox的個數
print'----頁面上checkbox的個數爲:',len(select_css)
#使用pop()獲取1組元素的第幾個元素
select_css.pop(0).click()#第一個
select_css.pop(1).click()#第二個
select_css.pop().click()#最後一個
select_css.pop(-1).click()#最後一個
select_css.pop(-2).click()#倒數第二個
dr.close()
<html>
<body>
<frameset>
<h3>frame</h3>
<iframeid='frameid'name='frameName'width="800"height="500"src="http://www.baidu.com"/>
</frameset>
</body>
</html>
dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
dr.switch_to_frame("frameid")#經過frame的id進入iframe
#dr.switch_to_frame("frameName") #經過frame的name進入iframe
#下面能夠對frame進行操做了
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
dr.switch_to_default_content()#退出當前frame返回上一層
dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
#定位到frame頁面元素
framepath=dr.find_element_by_class_name("frameClassname")
dr.switch_to_frame(framepath)#經過frame頁面對象進入iframe
#下面能夠對frame進行操做了
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
dr.switch_to_default_content()#退出當前frame返回上一層
dr.get("http://www.baidu.com")
current_handle=dr.current_window_handle #獲取百度首頁窗口句柄
index_login=dr.find_element_by_xpath("//div[@id='u1']/a[@class='lb']")#獲取登陸按鈕對象
index_login.click()#點擊登陸
dr.implicitly_wait(5)
dr.find_element_by_class_name("pass-reglink").click()#點擊當即註冊按鈕
all_handles=dr.window_handles #獲取全部打開窗口句柄
for handle in all_handles:
if handle==current_handle:
dr.switch_to_window(handle)
'''
...對首頁窗口進行操做
'''
print'----首頁頁面title:',dr.title
for handle in all_handles:
if handle!=current_handle:
dr.switch_to_window(handle)
'''
...對註冊窗口進行操做
'''
print'----註冊頁面title:',dr.title
dr.get("http://www.baidu.com")
set_link=dr.find_element_by_xpath("//div[@id='u1']/a[@class='pf']")#找到設置連接元素
ActionChains(dr).move_to_element(set_link).perform()#鼠標移動到設置上
dr.find_element_by_xpath("//a[@class='setpref']").click()#點擊搜索設置連接
time.sleep(3)
#加等待時間 等按鈕可用,不然會報錯 save_set=dr.find_element_by_css_selector("#gxszButton > a.prefpanelgo")#獲取保存設置按鈕
save_set.click()#點擊保存設置按鈕
alert=dr.switch_to_alert()
#進入alertprint'----彈出alert中內容爲:',alert.text #打印對話框裏的文字內容
alert.accept()#對話框裏點擊alert中肯定按鈕
#alert.dismiss() #對話框裏點擊取消按鈕
#alert.send_keys("對話框中輸入的內容") #在對話框裏輸入內容
dr.get("D:\\workspace\\pySelenium\\resources\\upload.htm")
loadFile=dr.find_element_by_name("filebutton")# 獲取上傳文件input元素節點
loadFile.send_keys("D:\\workspace\\pySelenium\\resources\\frame.htm")#輸入上傳文件地址來實現上傳
loadFile=dr.find_element_by_name("filebutton")# 獲取上傳按鈕
loadFile.click()
#點擊上傳按鈕,彈出上傳對話框 os.system("D:\\autoItFile.exe")
#調用autoIt生成的exe文件,實現導入 ffp=webdriver.FirefoxProfile()
ffp.set_preference("browser.download.folderList",2)#0:表明下載到瀏覽器默認路徑下;2:下載到指定目錄
ffp.set_preference("browser.download.manager.showWhenStarting",False)#是否顯示開始:True:顯示;False:不顯示
ffp.set_preference("browser.download.dir", os.getcwd())#指定下載文件目錄,os.getcwd()無參數,返回當前目錄
# ffp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下載文件類型,
#指定下載頁面的content-type值,application/octet-stream爲文件類型,http-content-type經常使用對照表搜索百度
dr=webdriver.Firefox(firefox_profile=ffp)
dr.get("https://pypi.python.org/pypi/selenium#downloads")
dr.find_element_by_xpath("//div[@id='content']/div[3]/table/tbody/tr[3]/td[1]/span/a[1]").click()
#接下來使用autoIt實現
num=1
dr.get("http://www.baidu.com")
cookies=dr.get_cookies()#獲取cookie的全部信息
for ck in cookies:
print'----全部cookie',num,':',ck #打印cookie的全部信息
num=num+1
print'----按name查cookie:',dr.get_cookie("PSTM")#經過cookie的name獲取cookie信息
dr.add_cookie({'name':'hello','value':'123456789'})#向name和value添加會話信息
cookies2=dr.get_cookies()#從新獲取cookie的全部信息
for ck2 in cookies2:
if ck2['name']=='hello':
print"----加入的cookie信息:%s-->%s",(ck2['name'],ck2['value'])
dr.get("http://www.baidu.com")
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
js="var q=document.documentElement.scrollTop=1000"
#滾動條滾到最下面 dr.execute_script(js)
time.sleep(4)
js2="var q=document.documentElement.scrollTop=0"
#滾動條滾到頁面頂 dr.execute_script(js2)
dr.get("http://www.baidu.com")
try:
dr.find_element_by_id("kw1").send_keys("selenium")
dr.find_element_by_id("su").click()
exceptNoSuchElementException,msg:
dr.get_screenshot_as_file("d:\\error.jpg")
#截圖輸出到d盤print msg
dr.close()
import random
randnum=random.randint(1000,9999)
print"----生成隨機數爲:",randnum
input_num=input(u"請輸入驗證碼:")
print"----輸入驗證碼爲:",input_num
if input_num==randnum:
print"隨機數正確,登陸成功"
elif input_num==1234:
print"輸入正確,登陸成功"
else:
print"登陸失敗"