selenium工具之元素定位方法find_element(by=By.xx, value='xxx') && find_elements(by=By.xx, value='xxx')详解
前言
selenium是一款十分强大的Web应用自动化框架,我们可以通过它来自动操控浏览器。操控浏览器的实质是操控浏览器的界面元素,因此定位元素是使用selenium的关键,selenium中通过 find_element() 方法来完成定位。
用法
1、通过webdriver对象的 find_element(by="属性名", value="属性值") 方法
源码如下:
实例如下:
from selenium import webdriver from selenium.webdriver.common.by import By caps = { 'browserName': 'chrome', 'loggingPrefs': { 'browser': 'ALL', 'driver': 'ALL', 'performance': 'ALL', }, 'goog:chromeOptions': { 'perfLoggingPrefs': { 'enableNetwork': True, }, 'w3c': False, }, } driver = webdriver.Chrome(desired_capabilities=caps, executable_path='/home/test/MyCode/Common/driver/chromedriver_102') driver.get('https://www.baidu.com') driver.find_element(by=By.ID, value='kw') driver.find_element(by='id', value='kw')
注意:
By 是一个集成属性名变量的类(通过类名.变量名来调用),如下:
2、通过webdriver对象的 find_element_by_xx(xx=xx) 方法(在selenium的4.0版本中此种用法已经抛弃,不推荐使用)
注意:但是可能因为项目需求或者浏览器版本需求可能在工作中使用到的还是较低版本的selenium,如下图:
selenium工具中有以下定位方式:
driver.find_element_by_id('id') driver.find_element_by_xpath('xpath') driver.find_element_by_link_text('link_text') driver.find_element_by_partial_link_text('partial_link_text') driver.find_element_by_name('name') driver.find_element_by_tag_name('tag_name') driver.find_element_by_class_name('class_name') driver.find_element_by_css_selector('css_selector')
通过以上元素定位的源码,可以看出上面的方法实际上调用的依旧是 driver.find_element(by, value)
3、 find_element(by=By.xx, value='xxx') && find_elements(by=By.xx, value='xxx') 的区别
① find_element() 的返回结果是一个WebElement对象,如果符合条件的有多个,默认返回找到的第一个,如果没有找到则抛出NoSuchElementException异常。
② find_elements() 的返回结果是一个包含所有符合条件的WebElement对象的列表,如果未找到,则返回一个空列表。
去期待陌生,去拥抱惊喜。