WebDriver定位元素的方式

Selenium.Webdriver的工作原理说起来很简单,就是自动化测试代码发送请求给浏览器驱动,然后浏览器驱动解析这些自动化测试的代码,解析后发送给浏览器,最后浏览器执行驱动发送的指令,完成具体的操作。

元素定位

这篇文章主要是总结一下WebDriver定位元素的几种方式。

id定位

'''
find_element_by_id("id")
因为ID属性唯一,所以这种定位结果是唯一确定的
'''
driver.find_element_by_id("account").clear()  # 清除内容
driver.find_element_by_id("account").send_keys("root")  # 写入值

name定位

'''
find_element_by_name("name")
name属性在同一页面可能不唯一,所以定位结果可能不唯一, 可能是一个值,也可能是一个list.
'''
driver.find_element_by_name("account").clear()
driver.find_element_by_xpath("account").send_keys(user="root")

class定位

'''
find_element_by_class_name("class")
有些网页用class倒是很方便
'''
driver.find_elements_by_class_name("btn_login").click()  # 自动登录

tag定位

# find_element_by_tag_name("tag")
# 不怎么用到,因为tag元素使用太频繁,用来定位不是很方便

Xpath定位

"""
find_element_by_xpath("xpath")
这个就很长见了,上面几种方式都可以用xpath写出来,这个是常见的。
由于浏览器一般自带自动生成xpath的功能,所以它的使用就显得很方便。
一般来说有三种方式
第一种是绝对路径定位,浏览器自动生成的xpath就是这种,很常见。
第二种是利用元素属性定位,使用能够唯一标识的属性,不指定时用*代替属性。
第三种是元素属性定位与层级定位的组合。
"""
driver.find_element_by_xpath("./*//a[@class='btn_login']").click()  # 自动登录
driver.find_elements_by_xpath(/html/body/div[2]/div[1]/div[2]/div/div/form/div[1]/div[1]/div/span/input)  # 自动登录
driver.find_elements_by_xpath(.//*[@id="header"]/div[2]/div/div/form/div[4]/a).click()  # 自动登录

CSS定位

'''
听说很强大,没怎么用过,可能学的还是太浅了。
'''
# 通过class属性定位:点号(".")表示通过class属性定位
driver.find_element_by_css_selector(".u-btn.mart5").click()
# 通过id属性定位:("#")表示通过id定位元素
driver.find_element_by_css_selector("#loginName")
# 通过其他属性定位:("[]"),中括号里的属性可以唯一标识这个元素就可以;属性的值可以加引号,也可以不加
driver.find_element_by_css_selector("[type=submit]").click()

P.S.

'''
find_element_by_some("some")这类方法都可以改写成find_element()方法
不过这种方法多了一个参数,就是定位的类型
'''
driver.find_elements(By.CLASS_NAME, "btn_login").click()  # 自动登录
driver.find_element(By.XPATH, "./*//a[@class='btn_login']").click()  # 自动登录

转发请注明出处,谢谢各位

你可能感兴趣的:(爬虫相关)