Selenium3多種元素定位,動態提示判斷操做javascript
八大元素定位:css
1)根據id來進行定位
html
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
#昨天代碼中的driver.find_element_by_id('kw')這個代碼就是python中根據id來進行定位
2)根據Name來進行定位java
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
#driver.find_element_by_name("wd")
3)根據class_name來進行定位(可能會存在錯誤的狀況,並不惟一class_name)python
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
#driver.find_element_by_class_name("s_ipt")
4)根據tag_name來進行定位(標籤屬性)web
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> #對應的標籤屬性是input,但在頁面中可能存在多個input的狀況,不經常使用標籤訂位
#driver.find_element_by_tag_name
5)根據link_text來進行定位(精確連接的文本)數組
<a href="http://news.baidu.com" target="_blank" class="mnav">新聞</a>
#連接文本定位是不能輸入只能點解
#driver.find_element_by_link_text("新聞")
6)根據partial_link_text來進行定位(模糊連接文本)瀏覽器
<a href="http://news.baidu.com" target="_blank" class="mnav">新聞</a>
#driver.find_element_by_partial_link_text("新聞")
7)根據Xpath來進行定位ui
<input type="text" class="s_ipt nobg_s_fm_hover" name="wd" id="kw" maxlength="100" autocomplete="off"> #在谷歌瀏覽器中能夠直接copy Xpath 如上標籤的Xpath爲//*[@id="kw"]
#driver.find_element_by_xpath("//*[@id="kw"]")
8)根據css_selector來進行定位spa
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> //和Xpath同樣,上標籤的爲"#kw" //driver.find_element_by_css_selector("#kw")
詳解Xpath和css(是路徑語言用來肯定某個位子的語言,至關於一個座標)
Xpath和css:
屬性定位(能夠根據元素中的id或者name來定位的):
#Xpath
driver.find_element_by_xpath("//*[@id="kw"]") //這個就是用屬性來定位 #"//*[@id="kw"]" //------//*表明全部標籤 //------[@id="kw"] 查詢id爲kw的元素
// CSS driver.find_element_by_css_selector("#kw") //在CSS中直接用.加上class屬性名就能夠了定位了,i#加上id名進行查找,以標籤來定位是直接用標籤名
其餘屬性:
//XPach <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> //driver.find_element_by_xpach("//*[@autocomplete="off"]")
// CSS driver.find_element_by_css_selector("[autocomplete='off']")
標籤訂位(標籤很容易重複只有和其餘屬性進行混合使用):
//XPach <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> //driver.find_element_by_xpach("//input[@autocomplete="off"]") //把*更改成標籤
// CSS driver.find_element_by_css_selector("input#kw")
層級定位:
<form name="f" id="form" action="/s" class="fm" onsubmit="javascript:F.call('ps/sug','pssubmit');"> <span id="s_kw_wrap" class="bg s_ipt_wr quickdelete-wrap"> <span class="soutu-btn"></span><input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> <a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;"></a> </span><input type="hidden" name="rsv_spt" value="1"><input type="hidden" name="rsv_iqid" value="0xd36c478c00042bb2"> <input type="hidden" name="issp" value="1"> <input type="hidden" name="f" value="8"> <input type="hidden" name="rsv_bp" value="0"> <input type="hidden" name="rsv_idx" value="2"> <input type="hidden" name="ie" value="utf-8"> <input type="hidden" name="rqlang" value=""> <input type="hidden" name="tn" value="baiduhome_pg"> <input type="hidden" name="ch" value=""> <span class="btn_wr s_btn_wr bg" id="s_btn_wr"> <input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn"></span> <span class="tools"> <span id="mHolder"> <div id="mCon"><span>輸入法</span> </div><ul id="mMenu"> <li><a href="javascript:;" name="ime_hw">手寫</a> </li><li><a href="javascript:;" name="ime_py">拼音</a></li> <li class="ln"></li> <li><a href="javascript:;" name="ime_cl">關閉</a></li></ul> </span><span class="bd_bear_home"></span></span> <input type="hidden" name="rsv_enter" value="1"> </form>
//XPach //driver.find_element_by_xpach("//form[@id='form'/span/input]")
// CSS driver.find_element_by_css_selector("form#form>span>input") //以>分割標籤
索引定位(在同一個層級下同標籤):
<div id="u_sp" class="s-isindex-wrap s-sp-menu"> <a href="http://news.baidu.com" target="_blank" class="mnav">新聞</a> <a href="https://www.hao123.com" target="_blank" class="mnav">hao123</a> <a href="http://map.baidu.com" target="_blank" class="mnav">地圖</a> <a href="http://v.baidu.com" target="_blank" class="mnav">視頻</a> <a href="http://tieba.baidu.com" target="_blank" class="mnav">貼吧</a> <a href="http://xueshu.baidu.com" target="_blank" class="mnav">學術</a><a id="s_username_top" class="s-user-name-top" data-tid="2004" href="http://i.baidu.com/" target="_blank"> <span class="user-name">手冢卿楓</span></a> <a id="s_usersetting_top" href="javascript:;" name="tj_settingicon" class="pf s-user-setting-top"> <span class="setting-text">設置</span></a> <a href="http://www.baidu.com/more/" name="tj_briicon" class="s_bri" target="_blank"> 更多產品</a><div id="s_user_name_menu" class="s-isindex-wrap s-user-set-menu menu-top" style="display:none;"><div> <a href="http://i.baidu.com/center" target="_blank" data-tid="1000"> 我的中心 </a> <a href="http://passport.baidu.com/" data-tid="1001" target="_blank"> 賬號設置 </a> <a class="s-feedback" style="overflow:hidden" href="#" onclick="return false;">意見反饋</a> <a class="quit" style="overflow:hidden" href="#" onclick="return false;"> 退出 </a> </div> <span class="menu-arrow"> <em></em> </span> </div>
//XPach //driver.find_element_by_xpach("//div[@id='u1'/a[1]]").click //座標以1開頭,進入新聞頁面
// CSS driver.find_element_by_css_selector("div#u1>a:nth-child(1)").click() //以>分割標籤
模糊匹配(css模糊匹配語法已廢除):
//XPach //driver.find_element_by_xpach("//*[contains(text(),'新聞')]").click
//driver.find_element_by_xpach("//*[contains(@id,kw)]").click
八種定位方法(以複數形式定位的):
以複數形式定位是指在html中存在多個屬性元素,查詢到的是一個數組類型的列表
<div id="u_sp" class="s-isindex-wrap s-sp-menu"> <a href="http://news.baidu.com" target="_blank" class="mnav">新聞</a>
<a href="https://www.hao123.com" target="_blank" class="mnav">hao123</a> <a href="http://map.baidu.com" target="_blank" class="mnav">地圖</a> <a href="http://v.baidu.com" target="_blank" class="mnav">視頻</a> <a href="http://tieba.baidu.com" target="_blank" class="mnav">貼吧</a> <a href="http://xueshu.baidu.com" target="_blank" class="mnav">學術</a><a id="s_username_top" class="s-user-name-top" data-tid="2004" href="http://i.baidu.com/" target="_blank"> <span class="user-name">手冢卿楓</span></a> <a id="s_usersetting_top" href="javascript:;" name="tj_settingicon" class="pf s-user-setting-top"> <span class="setting-text">設置</span></a> <a href="http://www.baidu.com/more/" name="tj_briicon" class="s_bri" target="_blank"> 更多產品</a><div id="s_user_name_menu" class="s-isindex-wrap s-user-set-menu menu-top" style="display:none;"><div> <a href="http://i.baidu.com/center" target="_blank" data-tid="1000"> 我的中心 </a> <a href="http://passport.baidu.com/" data-tid="1001" target="_blank"> 賬號設置 </a> <a class="s-feedback" style="overflow:hidden" href="#" onclick="return false;">意見反饋</a> <a class="quit" style="overflow:hidden" href="#" onclick="return false;"> 退出 </a> </div> <span class="menu-arrow"> <em></em> </span> </div>
mnav=driver.find_elements_by_xpath("//a[@class='mnav']") print(len(mnav))
其餘兩種定位方式:
單數形式:
driver.find_element(by='id',value='kw').send_keys('selenium')
複數形式:
mnav=driver.find_elements(by='class name',value='mnav') print(len(mnav))
Selenium簡單操做:
1)點擊頁面按鈕:click()
2)清空輸入框:clear()
3)輸入字符串:send_keys()
4)提交表單:submit()
Selenium鍵盤操做:
1)from selenium.webdriver.common.keys import Keys
2)enter鍵:send_keys(Keys.ENTER)
3)jianpanF1到F12:send_keys(Keys.F1)
4)複製CTRL+C:send_keys(Keys.CONIROL,'c')
5)粘貼CTRL+V:send_keys(Keys.CONIROL,'v')
6)全選CTRL+A:send_keys(Keys.CONIROL,'a')
7)剪切CTRL+X:send_keys(Keys.CONIROL,'x')
8)製表符TAB:send_keys(Keys,TAB)
Selenium鼠標懸停事件:
1)from selenium.webdriver.common.action_chains import ActionChains
2)鼠標懸停:move_to_element(元素對象)
3)右擊鼠標:context_click()
4)雙擊鼠標:double_click()
文章連接地址:http://mumuling.com/?p=82