關(guān)于Python 常用獲取元素 Driver 總結(jié)
1、在 Windows 設(shè)置臨時(shí)環(huán)境變量 cmd命令窗口 輸入 path=%path%;E:\soft\python-3.5.2-embed-win32
永久配置,在系統(tǒng)變量下找到path,在Path的最后面添加Python的安裝目錄
D:\Python34,同樣在PATHEXT中添加 .PY;.PYM
然后,輸入python 出現(xiàn)版本信息就成功了。
2、CMD命令窗口,清屏的方法
import os
os.system('cls')
如果不要返回值0就是:
import os
i=os.system('cls')
3、查看當(dāng)前系統(tǒng)時(shí)間
import time
#-*-格式時(shí)間格式-*-
localtime = time.asctime( time.localtime(time.time()) )
#-*-格式時(shí)間格式[格式化成2009-03-20 11:45:39形式]-*-
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
#-*-格式時(shí)間格式[時(shí)間戳格式]-*-
time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())
#-*-輸出格式化后的時(shí)間-*-
print ("本地時(shí)間為 :", localtime)
4、在CMD命令行中,輸入 “python” + “空格”,即 ”python “;將已經(jīng)寫(xiě)好的腳本文件拖拽到當(dāng)前光標(biāo)位置,然后敲回車(chē)運(yùn)行即可
5、亂碼原因:
因?yàn)槟愕奈募暶鳛閡tf-8,并且也應(yīng)該是用utf-8的編碼保存的源文件。但是windows的本地默認(rèn)編碼是cp936,也就是gbk編碼,所以在控制臺(tái)
直接打印utf-8的字符串當(dāng)然是亂碼了。
解決方法:
在控制臺(tái)打印的地方用一個(gè)轉(zhuǎn)碼就ok了,打印的時(shí)候這么寫(xiě):
print myname.decode('UTF-8').encode('GBK')
比較通用的方法應(yīng)該是:
import sys
type = sys.getfilesystemencoding()
print myname.decode('UTF-8').encode(type)
#-*-coding:UTF-8-*- 或者 import sys
reload(sys)
sys.setdefaultencoding('UTF-8')
6、其實(shí)要驅(qū)動(dòng)chrome瀏覽器必須要依賴Chromedriver文件才行,
下載地址: http://code.google.com/p/chromedriver/downloads/list
找到適合你自己系統(tǒng)的包之后下載解壓出Chromedriver文件,并將此文件拷貝到j(luò)ava項(xiàng)目的根目錄。還是拿上此教程的為例,我們直接爸chromedriver文件拷貝到HelloSelenium項(xiàng)目的根目錄下也就是HelloSelenium目錄下。這樣就可以直接運(yùn)行了。
7、 安裝pyse : 將其克隆到本地,將pyse目錄放到..\Python27\Lib\site-packages\目錄下。
https://github.com/defnngj/pyse
python setup.py install 安裝
java -jar selenium-server-standalone-3.4.0.jar -multiWindow
8、定位屬性
#########百度輸入框的定位方式##########
#通過(guò)id方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通過(guò)name方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通過(guò)tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通過(guò)class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通過(guò)CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通過(guò)xphan方式定位
browser.find_element_by_xpath("http://input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
一、元素的定位
1.webdriver提供的8種頁(yè)面元素定位方法:
id/name/class name/tag name/link text/partial link text/xpath/css selector
其中python對(duì)應(yīng)的8種方法:
find_element_by_id() 如: find_element_by_id("kw")
find_element_by_name() 如: find_element_by_name("wd")
find_element_by_class_name() 如: find_element_by_class_name("s_ipt")
find_element_by_tag_name() 如: find_element_by_tag_name("input")
find_element_by_link_text() 如:find_element_by_link_text(u"新聞")
find_element_by_partial_link_text() 如:find_element_by_partial_link_text(u"一個(gè)很長(zhǎng)的")
find_element_by_xpath() 如: find_element_by_xpath(" .//*[@id='kw']")
find_element_by_css_selector() 如: find_element_by_css_selector("#kw")
二、瀏覽器控制
1.控制瀏覽器大?。?/p>
set_window_size() 例如:driver.set_window_size(400,500)
maximize_window() 例如:driver.maximize_window() #無(wú)參數(shù)
2.瀏覽器后退、前進(jìn):back()-后退、farward()-前進(jìn)
三、鼠標(biāo)事件
ActionChains類提供的常用方法:
1.1 perform():執(zhí)行ActionChains中存儲(chǔ)的所有行為,對(duì)整個(gè)事件進(jìn)行提交
1.2 context_click(): 右擊
如:
from selenium.webdriver.common.action_chains import ActionChains
...
ActionChains(dr).context_click(docfile).perform()
1.3 double_click(): 雙擊
如:
from selenium.webdriver.common.action_chains import ActionChains
...
doubleClick=dr.find_element_by_id("xxx")
ActionChains(dr). double_Click(doubleClick).perform()
1.4 drag_and_drop(source,target): 拖動(dòng)
如:
from selenium.webdriver.common.action_chains import ActionChains
...
dsource=dr.find_element_by_id("xxx") #拖動(dòng)的源元素
dtarget=dr.find_element_by_id("xxx") #釋放的目標(biāo)目標(biāo)元素
ActionChains(dr).drag_and_drop(dsource,dtarget).perform()
1.5 move_to_element(): 鼠標(biāo)懸停
如:
from selenium.webdriver.common.action_chains import ActionChains
...
above=dr.find_element_by_id("xxx")
ActionChains(dr).move_to_element(above).perform()
四、鍵盤(pán)事件
1.首先要導(dǎo)入鍵盤(pán)事件的包
from selenium.webdriver.common.keys importKeys
...
dr.get("http://www.baidu.com")
#輸入內(nèi)容
dr.find_element_by_id("kw").send_keys("seleniumm")
#刪除輸入內(nèi)容的最后一個(gè)字母,
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全選輸入框內(nèi)容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#ctrl+x剪貼輸入框內(nèi)容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#ctrl+v剪貼輸入框內(nèi)容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#回車(chē)鍵操作
dr.find_element_by_id("su").send_keys(Keys.ENTER)
dr.close()
常用的鍵盤(pán)操作整理:
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) #回車(chē)鍵Enter send_keys(Keys.CONTROL,'a') #Ctrl+a send_keys(Keys.CONTROL,'c') #Ctrl+c send_keys(Keys.CONTROL,'x') #Ctrl+x send_keys(Keys.CONTROL,'v') #Ctrl+x send_keys(Keys.F1) #F1,類似的有F1-F12
五、獲取驗(yàn)證
六、設(shè)置等待
1.顯示等待:等待某個(gè)條件成立時(shí),繼續(xù)執(zhí)行,否則達(dá)到最大等待時(shí)間后拋出異常:TimeoutException,顯示等待是針對(duì)當(dāng)前要定位元素使用
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():在設(shè)置時(shí)間內(nèi),默認(rèn)間隔一段時(shí)間檢測(cè)一次當(dāng)前頁(yè)面元素是否存在,若超過(guò)當(dāng)前指定時(shí)間檢測(cè)不到則拋出異常; B.driver:webdriver的瀏覽器驅(qū)動(dòng),ie、firefox、chromea C.timeout:最長(zhǎng)超時(shí)時(shí)間,以秒為單位 D.poll_frequency:休眠間隔時(shí)間-步長(zhǎng),默認(rèn)0.5秒 E.ignored_exceptions:超時(shí)后異常信息,默認(rèn)拋出NoSuchElementException異常 F.until(method,message): 調(diào)用該方法提供的驅(qū)動(dòng)作為一個(gè)參數(shù),直到返回值為T(mén)rue G.until_not(method,message):調(diào)用該方法提供的驅(qū)動(dòng)作為一個(gè)參數(shù),直到返回值為False H.expected_conditions類提供的預(yù)期條件實(shí)現(xiàn)有: title_is:判斷標(biāo)題是否是xx title_contains:判斷標(biāo)題是否包含xx presence_of_element_located:元素是否存在 visibility_of_element_located:元素是否存在 visibility_of:是否可見(jiàn) 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:表單是否可見(jiàn),并切換到該表單 invisibility_of_element_located:判斷元素是否隱藏 element_to_be_clickable:判斷元素是否點(diǎn)擊,它處于可見(jiàn)和啟動(dòng)狀態(tài) staleness_of:等到一個(gè)元素不再依附于DOM element_to_be_selected:被選中的元素 element_located_to_be_selected:一個(gè)期望的元素位于被選中 element_selection_state_to_be:一個(gè)期望檢查如果給定元素被選中 element_located_selection_state_to_be:期望找到一個(gè)元素并檢查是否是選擇狀態(tài) alert_is_present:預(yù)期一個(gè)警告信息
2.隱式等待:通過(guò)一定的時(shí)長(zhǎng)等待頁(yè)面所有元素加載完成,哪個(gè)元素超出設(shè)置時(shí)長(zhǎng)沒(méi)被加載就拋出異常NoSuchElementException,隱式等待是針對(duì)所有元素的
implicitly_wait(5) #默認(rèn)單位為秒
示例:
dr.implicitly_wait(5)
七、sleep休眠 python中強(qiáng)制的程序等待
from time import sleep sleep(4) #默認(rèn)單位秒,設(shè)置小于1秒的時(shí)間可以用小數(shù)點(diǎn)如sleep(0.6)
八、定位一組元素,類似與1中定位單個(gè)元素方法
find_elements_by_id() 如: find_elements_by_id("kw")
find_elements_by_name() 如: find_elements_by_name("wd")
find_elements_by_class_name() 如: find_elements_by_class_name("s_ipt")
find_elements_by_tag_name() 如: find_elements_by_tag_name("input")
find_elements_by_link_text() 如:find_elements_by_link_text(u"新聞")
find_elements_by_partial_link_text() 如:find_elements_by_partial_link_text(u"一個(gè)很長(zhǎng)的")
find_elements_by_xpath() 如: find_elements_by_xpath(" .//*[@id='kw']")
find_elements_by_css_selector() 如: find_elements_by_css_selector("#kw")
使用場(chǎng)景:
a.批量操作對(duì)象,如選中頁(yè)面上所有復(fù)選框
b.先獲取一組對(duì)象,再在這組對(duì)象里定位需要的的一些對(duì)象,如定位所有復(fù)選框,然后選擇最后一個(gè)
例如:代碼如下
checkbox.htm頁(yè)面:
<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"/>圣誕節(jié)
<inputtype="checkbox"name="test"/>股市
<inputtype="checkbox"name="test"/>阿凡達(dá)
<inputtype="checkbox"name="test"/>十月圍城
<inputtype="checkbox"name="test"/>水價(jià)上調(diào)
<inputtype="button"value="檢測(cè)"id="btn"/>
</body>
python代碼:
from selenium import webdriver
dr=webdriver.Firefox()
dr.get("D:\\workspace\\pySelenium\\resources\\checkbox.htm")
#使用tagname方式選擇頁(yè)面上所有tagname為input的元素
select_tagname=dr.find_elements_by_tag_name("input")
#使用xpath方式選擇頁(yè)面上所有tagname為input的元素
select_xpath=dr.find_elements_by_xpath("http://input[@type='checkbox']")
#使用css_select方式選擇頁(yè)面上所有tagname為input的元素
select_css=dr.find_elements_by_css_selector('input[type=checkbox]')
for i in select_tagname:
#循環(huán)對(duì)每個(gè)input元素進(jìn)行點(diǎn)擊選中操作
if i.get_attribute("type")=='checkbox':
i.click()
for j in select_xpath:
#循環(huán)對(duì)每個(gè)input元素進(jìn)行點(diǎn)擊取消操作
j.click()
for k in select_css:
#循環(huán)對(duì)每個(gè)input元素進(jìn)行點(diǎn)擊選中操作
k.click()
#打印出checkbox的個(gè)數(shù)
print'----頁(yè)面上checkbox的個(gè)數(shù)為:',len(select_css)
#使用pop()獲取1組元素的第幾個(gè)元素
select_css.pop(0).click()#第一個(gè)
select_css.pop(1).click()#第二個(gè)
select_css.pop().click()#最后一個(gè)
select_css.pop(-1).click()#最后一個(gè)
select_css.pop(-2).click()#倒數(shù)第二個(gè)
dr.close()
備注:pop():選擇一組元素中的某一個(gè),要注意的是:pop()和pop(-1)都表示最后一個(gè)元素
九、多表單切換(對(duì)于有frame嵌套表單的操作)
frame頁(yè)面:
<html> <body> <frameset> <h3>frame</h3> <iframeid='frameid'name='frameName'width="800"height="500"src="http://www.baidu.com"/> </frameset> </body> </html>
python代碼:
dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
dr.switch_to_frame("frameid")#通過(guò)frame的id進(jìn)入iframe
#dr.switch_to_frame("frameName") #通過(guò)frame的name進(jìn)入iframe
#下面可以對(duì)frame進(jìn)行操作了
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
dr.switch_to_default_content()#退出當(dāng)前frame返回上一層
備注:
1.switch_to_frame()默認(rèn)直接取表單的id或者name屬性來(lái)切換
2.完成當(dāng)前frame表單操作后,可以通過(guò)switch_to_default_content()方法返回上一層表單,即離的最近的switch_to_frame()方法
3.對(duì)于frame中沒(méi)有id和name屬性的通過(guò)下面方式進(jìn)入frame(定位到frame以頁(yè)面對(duì)象傳入)
python代碼:
dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
#定位到frame頁(yè)面元素
framepath=dr.find_element_by_class_name("frameClassname")
dr.switch_to_frame(framepath)#通過(guò)frame頁(yè)面對(duì)象進(jìn)入iframe
#下面可以對(duì)frame進(jìn)行操作了
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
dr.switch_to_default_content()#退出當(dāng)前frame返回上一層
十、多窗口切換
selenium-webdriver中使用switch_to_window()方法來(lái)切換任意窗口,常用方法有
driver.current_window_handle #獲取當(dāng)前窗口句柄 driver.window_handles #返回所有窗口句柄到當(dāng)前會(huì)話 driver.switch_to_window() #進(jìn)入窗口,用于切換不同窗口
python代碼:
dr.get("http://www.baidu.com")
current_handle=dr.current_window_handle #獲取百度首頁(yè)窗口句柄
index_login=dr.find_element_by_xpath("http://div[@id='u1']/a[@class='lb']")#獲取登錄按鈕對(duì)象
index_login.click()#點(diǎn)擊登錄
dr.implicitly_wait(5)
dr.find_element_by_class_name("pass-reglink").click()#點(diǎn)擊立即注冊(cè)按鈕
all_handles=dr.window_handles #獲取所有打開(kāi)窗口句柄
for handle in all_handles:
if handle==current_handle:
dr.switch_to_window(handle)
'''
...對(duì)首頁(yè)窗口進(jìn)行操作
'''
print'----首頁(yè)頁(yè)面title:',dr.title
for handle in all_handles:
if handle!=current_handle:
dr.switch_to_window(handle)
'''
...對(duì)注冊(cè)窗口進(jìn)行操作
'''
print'----注冊(cè)頁(yè)面title:',dr.title
十一、警告框處理
webdriver中處理js生成的alert、confirm、prompt處理方法是:使用switch_to_alert()定位到alert/confirm/prompt,然后使用text、accept、dismiss、send_keys來(lái)根據(jù)需要操作。
text:返回alert、confirm、prompt中的文字信息
accept:點(diǎn)擊確認(rèn)按鈕
dismiss:點(diǎn)擊取消按鈕
send_keys:在alert、confirm有對(duì)話框時(shí)輸入值
python代碼:
dr.get("http://www.baidu.com")
set_link=dr.find_element_by_xpath("http://div[@id='u1']/a[@class='pf']")#找到設(shè)置鏈接元素
ActionChains(dr).move_to_element(set_link).perform()#鼠標(biāo)移動(dòng)到設(shè)置上
dr.find_element_by_xpath("http://a[@class='setpref']").click()#點(diǎn)擊搜索設(shè)置鏈接
time.sleep(3) #加等待時(shí)間 等按鈕可用,否則會(huì)報(bào)錯(cuò)
save_set=dr.find_element_by_css_selector("#gxszButton > a.prefpanelgo")#獲取保存設(shè)置按鈕
save_set.click()#點(diǎn)擊保存設(shè)置按鈕
alert=dr.switch_to_alert() #進(jìn)入alert
print'----彈出alert中內(nèi)容為:',alert.text #打印對(duì)話框里的文字內(nèi)容
alert.accept()#對(duì)話框里點(diǎn)擊alert中確定按鈕
#alert.dismiss() #對(duì)話框里點(diǎn)擊取消按鈕
#alert.send_keys("對(duì)話框中輸入的內(nèi)容") #在對(duì)話框里輸入內(nèi)容
十二、上傳文件
分2種:普通上傳、插件上傳
普通上傳:將本地文件的路徑作為一個(gè)值放到input標(biāo)簽中,通過(guò)form表單提交時(shí),將值傳給服務(wù)器中去
插件上傳:指基于flash、javascript或ajax技術(shù)實(shí)現(xiàn)的上傳功能或插件。
1.針對(duì)普通上傳用send_keys實(shí)現(xiàn)
python代碼:
dr.get("D:\\workspace\\pySelenium\\resources\\upload.htm")
loadFile=dr.find_element_by_name("filebutton")# 獲取上傳文件input元素節(jié)點(diǎn)
loadFile.send_keys("D:\\workspace\\pySelenium\\resources\\frame.htm")#輸入上傳文件地址來(lái)實(shí)現(xiàn)上傳
2.插件上傳:使用AutoIt實(shí)現(xiàn),--需要安裝AutoIt程序
AutoIt安裝,使用暫時(shí)略,需要時(shí)再追加,流程為:用AutoIt編寫(xiě)上傳文件腳本生成exe文件,在python腳本中進(jìn)行調(diào)用
python代碼:
loadFile=dr.find_element_by_name("filebutton")# 獲取上傳按鈕
loadFile.click() #點(diǎn)擊上傳按鈕,彈出上傳對(duì)話框
os.system("D:\\autoItFile.exe") #調(diào)用autoIt生成的exe文件,實(shí)現(xiàn)導(dǎo)入
十三、下載文件:使用AutoIt實(shí)現(xiàn),--需要安裝AutoIt程序,方法同上傳
python代碼:
ffp=webdriver.FirefoxProfile()
ffp.set_preference("browser.download.folderList",2)#0:代表下載到瀏覽器默認(rèn)路徑下;2:下載到指定目錄
ffp.set_preference("browser.download.manager.showWhenStarting",False)#是否顯示開(kāi)始:True:顯示;False:不顯示
ffp.set_preference("browser.download.dir", os.getcwd())#指定下載文件目錄,os.getcwd()無(wú)參數(shù),返回當(dāng)前目錄
# ffp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下載文件類型,
#指定下載頁(yè)面的content-type值,application/octet-stream為文件類型,http-content-type常用對(duì)照表搜索百度
dr=webdriver.Firefox(firefox_profile=ffp)
dr.get("https://pypi.python.org/pypi/selenium#downloads")
dr.find_element_by_xpath("http://div[@id='content']/div[3]/table/tbody/tr[3]/td[1]/span/a[1]").click()
#接下來(lái)使用autoIt實(shí)現(xiàn)
十四、cookies操作
webdriver操作cookies的方法:
get_cookies():獲得所有cookies的值
get_cookie(name):獲得有特定name值的cookie信息
add_cookie(cookie_dict):添加cookie,必須有name和value
delete_cookie(name):刪除特定名稱的cookie信息,通過(guò)name找到特定的cookie并刪除
delete_all_cookies():刪除瀏覽器中所有cookie的信息
注意:
1.cookie是以字典形式進(jìn)行存儲(chǔ)的;
2.使用場(chǎng)景:如登錄功能會(huì)把用戶名寫(xiě)入瀏覽器cookie指定key為username,那么就可以通過(guò)get_cookies()找到username,打印value,找不到說(shuō)明保存瀏覽器的cookie是有bug的。
python代碼:
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")#通過(guò)cookie的name獲取cookie信息
dr.add_cookie({'name':'hello','value':'123456789'})#向name和value添加會(huì)話信息
cookies2=dr.get_cookies()#重新獲取cookie的所有信息
for ck2 in cookies2:
if ck2['name']=='hello':
print"----加入的cookie信息:%s-->%s",(ck2['name'],ck2['value'])
十五、javascript調(diào)用,python使用的方法:execute_script()
python代碼:
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" #滾動(dòng)條滾到最下面
dr.execute_script(js)
time.sleep(4)
js2="var q=document.documentElement.scrollTop=0" #滾動(dòng)條滾到頁(yè)面頂
dr.execute_script(js2)
十六、截圖,適用于腳本出錯(cuò)時(shí),對(duì)當(dāng)前窗口進(jìn)行截圖保存,使用函數(shù):get_screenshot_as_file()
python代碼:
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盤(pán)
print msg
dr.close()
十七、關(guān)閉窗口
quit():退出相關(guān)驅(qū)動(dòng)程序并關(guān)閉所有窗口。
close():關(guān)閉當(dāng)前窗口,打給多個(gè)窗口時(shí),可使用來(lái)關(guān)閉當(dāng)前窗口
十八、驗(yàn)證碼處理
方法1:去掉驗(yàn)證碼,問(wèn)題:如果是在正式環(huán)境跑腳本那么在取掉會(huì)存在風(fēng)險(xiǎn)
方法2:設(shè)置萬(wàn)能驗(yàn)證碼,不需要取消驗(yàn)證碼,在程序中留后門(mén)--設(shè)置一個(gè)萬(wàn)能驗(yàn)證碼,輸入萬(wàn)能驗(yàn)證碼了就標(biāo)識(shí)通過(guò)
python代碼:
import random randnum=random.randint(1000,9999) print"----生成隨機(jī)數(shù)為:",randnum input_num=input(u"請(qǐng)輸入驗(yàn)證碼:") print"----輸入驗(yàn)證碼為:",input_num if input_num==randnum: print"隨機(jī)數(shù)正確,登錄成功" elif input_num==1234: print"輸入正確,登錄成功" else: print"登錄失敗"
方法3:使用cookie方法獲取,讀取之前登錄的cookie值訪問(wèn)時(shí),直接登錄,不需要驗(yàn)證碼
--------------------------------------------------- CMD -----------命令啟動(dòng)Python腳本
文件命名為:test.bat 貌似不能用
@echo off
echo.
python E:\pythonScript\Auto_linknetwork.py
cd /D C:\Python27
python.exe
rm #!C:\Python27/python.exe
import os;
i=os.system("清屏",cls);
import time;
#-*-格式時(shí)間格式[格式化成2009-03-20 11:45:39形式]-*-
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime());
print ("系統(tǒng)當(dāng)前時(shí)間為 :", localtime);
1、截屏
driver.save_screenshot('E:\\pythonScript\\images\\'+strTime+'baidu.png')
三. WebElement接口獲取值
通過(guò)WebElement接口可以獲取常用的值,這些值同樣非常重要。 size 獲取元素的尺寸
text 獲取元素的文本
get_attribute(name) 獲取屬性值
location 獲取元素坐標(biāo),先找到要獲取的元素,再調(diào)用該方法
page_source 返回頁(yè)面源碼
driver.title 返回頁(yè)面標(biāo)題
current_url 獲取當(dāng)前頁(yè)面的URL
is_displayed() 設(shè)置該元素是否可見(jiàn)
is_enabled() 判斷元素是否被使用
is_selected() 判斷元素是否被選中
tag_name 返回元素的tagName
四.得到函數(shù)中的返回值
函數(shù)()
def returnval():
driver = webdriver.Chrome()
print u"\n回傳值"
return driver
#returnval()
src = ("http://hos.sf-express.com")
returnval().get(src)
print returnval()
將函數(shù)作為返回值返回,不返回結(jié)果只返回函數(shù)
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
>> f = lazy_sum(1, 3, 2, 7, 9)
>> f
>> f()
#此時(shí)才是真正的計(jì)算出函數(shù)值;
新建實(shí)例driver = webdriver.Chrome()
1.獲取當(dāng)前頁(yè)面的Url函數(shù)
方法:current_url
實(shí)例:
driver.current_url
2.獲取元素坐標(biāo)
方法:location
解釋:首先查找到你要獲取元素的,然后調(diào)用location方法
實(shí)例:
driver.find_element_by_xpath("http://*[@id='tablechart']/tbody/tr[14]/td[9]").location
3.表單的提交
方法:submit
解釋:查找到表單(from)直接調(diào)用submit即可
實(shí)例:
driver.find_element_by_id("form1").submit()
4.獲取CSS的屬性值
方法:value_of_css_property(css_name)
實(shí)例:
driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")
5.獲取元素的屬性值
方法:get_attribute(element_name)
實(shí)例:
driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")
6.判斷元素是否被選中
方法:is_selected()
實(shí)例:
driver.find_element_by_id("form1").is_selected()
7.返回元素的大小
方法:size
實(shí)例:
driver.find_element_by_id("iptPassword").size
返回值:{'width': 250, 'height': 30}
8.判斷元素是否顯示
方法:is_displayed()
實(shí)例:
driver.find_element_by_id("iptPassword").is_displayed()
9.判斷元素是否被使用
方法:is_enabled()
實(shí)例:
driver.find_element_by_id("iptPassword").is_enabled()
10.獲取元素的文本值
方法:text
實(shí)例:driver.find_element_by_id("iptUsername").text
11.元素賦值
方法:send_keys(*values)
實(shí)例:
driver.find_element_by_id("iptUsername").send_keys('admin')
注意如果是函數(shù)需要增加轉(zhuǎn)義符u,eg.
driver.find_element_by_id("iptUsername").send_keys(u'青春')
12.返回元素的tagName
方法:tag_name
實(shí)例:
driver.find_element_by_id("iptUsername").tag_name
13.刪除瀏覽器所以的cookies
方法:delete_all_cookies()
實(shí)例:
driver.delete_all_cookies()
14.刪除指定的cookie
方法:delete_cookie(name)
實(shí)例:deriver.delete_cookie("my_cookie_name")
15.關(guān)閉瀏覽器
方法:close()
實(shí)例:driver.close()
16.關(guān)閉瀏覽器并且推出驅(qū)動(dòng)程序
方法:quit()
實(shí)例:driver.quit()
17.返回上一頁(yè)
方法:back()
實(shí)例:driver.back()
18.設(shè)置等待超時(shí)
方法:implicitly_wait(wait_time)
實(shí)例:driver.implicitly_wait(30)
19.瀏覽器窗口最大化
方法:maximize_window()
實(shí)例:driver.maximize_window()
20.查看瀏覽器的名字
方法:name
實(shí)例:drvier.name
以上這篇關(guān)于Python 常用獲取元素 Driver 總結(jié)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)批量注冊(cè)網(wǎng)站用戶的示例
今天小編就為大家分享一篇python實(shí)現(xiàn)批量注冊(cè)網(wǎng)站用戶的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python開(kāi)發(fā)游戲之井字游戲的實(shí)戰(zhàn)步驟
最近正在學(xué)習(xí)Python,所以最近做了一個(gè)關(guān)于Python的實(shí)例,下面這篇文章主要給大家介紹了關(guān)于Python開(kāi)發(fā)游戲之井字游戲的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
pandas.DataFrame.drop_duplicates 用法介紹
這篇文章主要介紹了pandas.DataFrame.drop_duplicates 用法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理基本操作詞袋模型
本文是Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理系列文章,帶大家開(kāi)啟一段學(xué)習(xí)自然語(yǔ)言處理 (NLP) 的旅程。本篇文章主要學(xué)習(xí)NLP自然語(yǔ)言處理基本操作之詞袋模型2021-09-09
Python 3.6 中使用pdfminer解析pdf文件的實(shí)現(xiàn)
這篇文章主要介紹了Python 3.6 中使用pdfminer解析pdf文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python3 翻轉(zhuǎn)二叉樹(shù)的實(shí)現(xiàn)
這篇文章主要介紹了Python3 翻轉(zhuǎn)二叉樹(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
python文件轉(zhuǎn)為exe文件的方法及用法詳解
py2exe是一個(gè)將python腳本轉(zhuǎn)換成windows上的可獨(dú)立執(zhí)行的可執(zhí)行程序(*.exe)的工具,這樣,你就可以不用裝python而在windows系統(tǒng)上運(yùn)行這個(gè)可執(zhí)行程序。本文重點(diǎn)給大家介紹python文件轉(zhuǎn)為exe文件的方法,感興趣的朋友跟隨小編一起看看吧2019-07-07
使用EduBlock輕松學(xué)習(xí)Python編程
今天小編就為大家分享一篇關(guān)于使用EduBlock輕松學(xué)習(xí)Python編程的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10

