Selenium3(二)

Selenium3多种元素定位,动态提示判断操作

  八大元素定位:

    1)根据id来进行定位

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

#昨天代码中的driver.find_element_by_id('kw')这个代码就是python中根据id来进行定位

    2)根据Name来进行定位

<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)

<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来进行定位(标签属性)

<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来进行定位

<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来进行定位

<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  

    

猜你喜欢

转载自www.cnblogs.com/cpxjl/p/9151488.html