Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质。
webdriver 提供了八种元素定位方法,python语言中也有对应的方法,
序号 | webdriver元素定位方法 | python中对应方法 |
1 | id | find_element_by_id() |
2 | name | find_element_by_name() |
3 | class name | find_element_by_class_name() |
4 | tag name | find_element_by_tag_name() |
5 | link text | find_element_by_link_text() |
6 | partial link text | find_element_by_partial_link_text() |
7 | xpath | find_element_by_xpath() |
8 | css selector | find_element_by_css_selector() |
其中,前面两个方法的唯一性很高,
找元素,确保其唯一性,否则报错,可以通过搜索来确定,比如下面:输入kw,可以看有多少个id等于kw的

输入框<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off"> ’百度一下‘按钮<input id="su" class="bg s_btn" value="百度一下" type="submit"> #iddr.find_element_by_id("kw")dr.find_element_by_id("su") #namedr.find_element_by_name("wd") #clas name,其实就是classdr.find_element_by_class_name("s_ipt")dr.find_element_by_class_name("bg s_btn") #tag name,标签,用得很少,除非是像第二种定位一组元素dr.find_element_by_tag_name("input")dr.find_elements_by_tag_name("input")[7].send_keys("ssss") # 定位一组元素,第8个 <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a><a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a<a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a><a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a><a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">一个很长很长的文本</a> #link textdr.find_element_by_link_text("新闻").click()dr.find_element_by_link_text("一个很长很长的文本").click()dr.find_element_by_partial_link_text("文本") # 对上面的补充,部分文字链接
#xpath dr.find_element_by_xpath() # id 不指定标签 dr.find_element_by_xpath("//*[@id='kw']") # //表示某个目录下,/表示根目录,*表示标签名,可以指定,也可以不指定,此处不指定。整体含义:某个路径下的某个标签下有一个id属性等于kw # id 指定标签,可以缩小范围 dr.find_element_by_xpath('//input[@id="kw"]') # name dr.find_element_by_xpath('//input[@name="wd"]') # class dr.find_element_by_xpath('//input[@class="s_ipt"]') # 具有的其余属性,比如maxlength dr.find_element_by_xpath('//input[@maxlength="100"]') 所以,所有属性都可以,只要是唯一的。 如果没有可用的属性,则找上级 # 上级(父级)标签span dr.find_element_by_xpath('//span[@class="bg s_ipt_wr"]/input') # 此处一个/表示父子关系,下一级 dr.find_element_by_xpath('//span[@class="bg s_ipt_wr"]/input[@class="s_ipt"]') # 父级属性加子级属性,更精确 # 上上级(爷爷级)标签form dr.find_element_by_xpath("//form[@id='form']/span[2]/input") # 第二个span,从1开始的,百度按钮 firebug复制路径

