方法一:通过id定位
语法:find_element_by_id()
举例:find_element_by_id("kw")
方法二:通过name定位
语法:find_element_by_name()
举例:find_element_by_name("wd")
方法三:通过class name定位
语法:find_element_by_class_name()
举例:find_element_by_class_name("s_ipt")
方法四:通过tag name定位
语法:find_element_by_tag_name()
举例:find_element_by_tag_name("input")
方法五:通过link text定位
语法:find_element_by_partial_link_text()
举例:find_element_by_link_text("新闻")
说明:在执行中文的地方出现在乱码,可以在中文件字符串的前面
加个小“u”可以有效的避免乱码的问题,加 u 的作用是把中文字符串转换中 unicode 编码,如:
find_element_by_link_text(u"新闻")
方法六:通过parial link 定位
语法:find_element_by_partial_link_text( )
举例:
find_element_by_partial_link_text("一个很长的")
find_element_by_partial_link_text("文本链接")
方法七:通过XPATH定位
举例:找到百度输入框和搜索按钮
A:绝对路径定位:[用标签名的层级关系来定位元素的绝对路径 ]
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input") ------>说明:div[2]表示第二个 div 标签
B:利用元素属性定位:
find_element_by_xpath("//input[@id='kw']") ------》说明://表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的 id 属性值等于kw
find_element_by_xpath("//input[@id='su']")
find_element_by_xpath("//input[@id='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
find_element_by_xpath("//*[@class='bg s_btn']") -----》不想指定标签名也可以用星号(*)代替
说明:使用 XPath 不仅仅只局限在 id、name 和 class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素
find_element_by_xpath("//input[@maxlength='100']")
find_element_by_xpath("//input[@autocomplete='off']")
find_element_by_xpath("//input[@type='submit']")
C:层级与属性结合 -----》适用于本身没有可利用的属性值,我们可利用他的上一级属性值
find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")
说明:通过 class 属性定位到是父元素,后面/input 也就表示父元素下面标签名为input 的子元素。如果父元素没有可利用的属性值,那么可以继续向上查找“爷爷”元素。
D:使用逻辑运算符 ---》如果一个属性不能唯一的区分一个元素,我们还可以使用逻辑运算符连接多个属性来区别于其它属性。
如果要找到第一个元素:方法为:find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")
---------------------------------说明:可以通过firebug复制XPATH----------------------------------------------------------------------------------------------------------------
方法八:通过CSS 定位
CSS定位,一般情况下定位速度要比 XPath 快
CSS 选择器的常见语法:
选择器 | 例子 描述 |
.class | .intro class 选择器,选择 class="intro"的所有元素 |
#id | #firstname id 选择器,选择所有 id="firstname"所有元素 |
* | * 选择所有元素 |
element | p 元素所有元素 |
element > element | div > input 选择父元素为 元素的所有 元素 |
element + element | div + input 选择紧接在 元素之后的所有 元素。 |
[attribute=value] | [target=_blank] 选择 target="_blank" 的所有元素。 |
maxlength="100" value="" name="wd">
value="百度一下">
A:通过 class 属性定位 (点号(.)表示通过 class 属性来定位元素 )
find_element_by_css_selector(".s_ipt") ----》定位到输入框
B:通过 id 属性定位 (井号(#)表示通过 id 属性来定位元素 )
find_element_by_css_selector("#kw") ----》定位到输入框
C:通过标签名定位: [通过这种方式很难唯一的标识一个元素 ]
find_element_by_css_selector("input")
D:通过父子关系定位:
find_element_by_css_selector("span>input")
E:通过属性定位:
find_element_by_css_selector("input[autocomplete='off']")
F:组合定位:
find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")
说明:它的标签名叫 span,它有一个 class 属性值叫 bg s_ipt_wr,它有一个子元素,标签名
叫 input,并且这个子元素的 class 属性值叫 s_ipt
----------------------------说明:可以使用 Firebug 工具帮助我们生成 CSS 语法。通过 Firebug 定位元素,在元素上右键点击选择“复制 CSS” ------------
webdriver提供的用 By 定位元素
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新闻")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
find_element()方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;另第二个参数是定位的值。
说明:在使用 By 时需要将 By 类导入。from selenium.webdriver.common.by import By