如何查找获取单一元素element的方法及对应demo?(Python Selenium)
本帖最后由 草帽路飞UU 于 2022-8-25 16:43 编辑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
1 根据id进行获取--find_element_by_id
find_element_by_id("元素的id")
例子:获取bing的"国内版"按钮divbing的"国内版"按钮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结果为"国内版"
2 根据class进行获取--find_element_by_class_name
find_element_by_class_name("元素的className")
例子:获取bing的"国内版"按钮divbing的"国内版"按钮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符合条件的元素。
3 根据xpath进行获取--find_element_by_xpath
find_element_by_xpath("元素的xpath")
例子:获取bing的"国内版"按钮div首先获取元素的xpath,可以利用Chrome的开发者工具来进行快速获取
本帖最后由 草帽路飞UU 于 2022-8-25 16:44 编辑
# bing的"国内版"按钮xpath为'//*[@id="est_cn"]' 或者 全xpath为'/html/body/div/div/div/div/div/div'
################################################################################
# 在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/div/div/div/div/div') #使用全xpath
print(button_element.text) # button_element.text结果为"国内版"
4 根据name进行获取--find_element_by_name
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'
5 根据tag name进行获取--find_element_by_tag_name
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'
6 根据css进行获取--find_element_by_css_selector
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) # 结果为'国内版'
7 根据链接的文本进行获取--find_element_by_link_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) # 结果为'图片'
8 根据部分链接的文本进行获取--find_element_by_partial_link_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) # 结果为'图片'
9 根据 By+locator定位器 进行获取--find_element
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结果为"国内版"
页:
[1]