赞
踩
Selenium 获取单一元素(find element)的主要方法有9种。在实际使用中,需要灵活根据实际情况选取不同的方法进行元素获取。
目录
1 根据id进行获取--find_element_by_id
2 根据class进行获取--find_element_by_class_name
3 根据xpath进行获取--find_element_by_xpath
4 根据name进行获取--find_element_by_name
5 根据tag name进行获取--find_element_by_tag_name
6 根据css进行获取--find_element_by_css_selector
7 根据链接的文本进行获取--find_element_by_link_text
8 根据部分链接的文本进行获取--find_element_by_partial_link_text
9 根据 By+locator定位器 进行获取--find_element
find_element_by_id("元素的id")
例子:获取bing的"国内版"按钮div
bing的"国内版"按钮div为:<div id="est_cn" class="est_common est_selected">国内版</div>
- ################################################################################
- # 在selenium查找该div代码:
- driver.get('https://cn.bing.com/')
- button_element = driver.find_element_by_id('est_cn')
- print(button_element.text) # button_element.text结果为"国内版"
find_element_by_class_name("元素的className")
例子:获取bing的"国内版"按钮div
bing的"国内版"按钮class name为'est_common est_selected'
- ################################################################################
- # 由于该class name有空格,不能直接使用如下方法获取
- driver.find_element_by_class_name('est_common est_selected') # 报异常NoSuchElementException
-
- # 对于空格情况,取class name其中的一个就行
- driver.get('https://cn.bing.com/')
- button_element = driver.find_element_by_class_name('est_common')
- print(button_element.text) # button_element.text结果为"国内版"
-
- # 或者
- driver.get('https://cn.bing.com/')
- button_element = driver.find_element_by_class_name('est_selected')
- print(button_element.text) # button_element.text结果为"国内版"
注意,在本例中使用class name任意一个也能获取正确结果,但实际使用中需要注意带空格的class name取哪一个的问题。需要取唯一能定位该元素的class name。在class name不唯一的情况,find_element_by_class_name是获取第一个class name符合条件的元素。
find_element_by_xpath("元素的xpath")
例子:获取bing的"国内版"按钮div
首先获取元素的xpath,可以利用Chrome的开发者工具来进行快速获取
- # bing的"国内版"按钮xpath为'//*[@id="est_cn"]' 或者 全xpath为'/html/body/div[2]/div/div[3]/div[2]/div/div[1]'
-
- ################################################################################
- # 在selenium查找该div代码:
- driver.get('https://cn.bing.com/')
- button_element = driver.find_element_by_xpath('//*[@id="est_cn"]') #使用xpath
- print(button_element.text) # button_element.text结果为"国内版"
-
- # 或者
- driver.get('https://cn.bing.com/')
- button_element = driver.find_element_by_xpath('/html/body/div[2]/div/div[3]/div[2]/div/div[1]') #使用全xpath
- print(button_element.text) # button_element.text结果为"国内版"
find_element_by_name("元素的name")
例子:获取bing提交按钮元素
如下图所示,提交input的name为search
- ################################################################################
- # 在selenium查找提交按钮元素代码:
- driver.get('https://cn.bing.com/')
- input_element = driver.find_element_by_name('search')
- print(input_element.get_attribute('type')) # 结果为'submit'
find_element_by_name("元素的tag name")
例子:获取bing的搜索表单form
- ################################################################################
- # 在selenium查找输入表单元素代码:
- driver.get('https://cn.bing.com/')
- form_element = driver.find_element_by_tag_name('form')
- print(form_element.get_attribute('action')) # 结果为'https://cn.bing.com/search'
find_element_by_css_selector("元素的css")
例子:获取bing的"国内版"按钮div
- ################################################################################
- # 在selenium查找输入表单元素代码:
- driver.get('https://cn.bing.com/')
- # button_element = driver.find_element_by_css_selector('#est_switch .est_selected') #唯一
- # button_element = driver.find_element_by_css_selector('#est_switch .est_common') #其实bing中这个css还有"国际版"按钮,但是"国内版"是符合条件的第一个元素,所以最后获取到的还是"国内版"按钮
-
- # 还记得find_element_by_class_name中bing的"国内版"按钮class name为'est_common est_selected'吗?
- #其实对于这种带空格的class name,使用find_element_by_css_selector获取更加方便和准确
- button_element = driver.find_element_by_css_selector('.est_common.est_selected')
- print(button_element.text) # 结果为'国内版'
find_element_by_link_text("链接元素的文本")
例子:
如下图所示,bing首页图片链接的text为“图片”
- ################################################################################
- # 在selenium查找"图片"链接元素代码:
- driver.get('https://cn.bing.com/')
- link_element = driver.find_element_by_link_text('图片')
- print(link_element.text) # 结果为'图片'
find_element_by_partial_link_text("链接元素的部分文本")
- ################################################################################
- # 在selenium查找"图片"链接元素代码:
- driver.get('https://cn.bing.com/')
- link_element = driver.find_element_by_partial_link_text('图')
- # link_element = driver.find_element_by_partial_link_text('片') #这样也可以
- print(link_element.text) # 结果为'图片'
find_element(By_strategy,locator)
如下图所示,By的属性有By.ID,By.XPATH,By.LINK_TEXT等(其实就是覆盖了前面的8种类型)
例子:获取bing的"国内版"按钮div
- ################################################################################
- # 在selenium查找该div代码:
- driver.get('https://cn.bing.com/')
-
- # button_element = driver.find_element(By.ID, 'est_cn')
- # button_element = driver.find_element(By.XPATH, '//*[@id="est_cn"]')
- button_element = driver.find_element(By.CSS_SELECTOR, '.est_common.est_selected')
- print(button_element.text)t) # button_element.text结果为"国内版"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。