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