当前位置:   article > 正文

​Python Selenium查找获取单一元素​element的用法及对应demo_python抓取elements代码

python抓取elements代码

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的"国内版"按钮div

bing的"国内版"按钮div为:<div id="est_cn" class="est_common est_selected">国内版</div>

  1. ################################################################################
  2. # 在selenium查找该div代码:
  3. driver.get('https://cn.bing.com/')
  4. button_element = driver.find_element_by_id('est_cn')
  5. print(button_element.text) # button_element.text结果为"国内版"

2 根据class进行获取--find_element_by_class_name

find_element_by_class_name("元素的className")

例子:获取bing的"国内版"按钮div

bing的"国内版"按钮class name为'est_common est_selected'

  1. ################################################################################
  2. # 由于该class name有空格,不能直接使用如下方法获取
  3. driver.find_element_by_class_name('est_common est_selected') # 报异常NoSuchElementException
  4. # 对于空格情况,取class name其中的一个就行
  5. driver.get('https://cn.bing.com/')
  6. button_element = driver.find_element_by_class_name('est_common')
  7. print(button_element.text) # button_element.text结果为"国内版"
  8. # 或者
  9. driver.get('https://cn.bing.com/')
  10. button_element = driver.find_element_by_class_name('est_selected')
  11. 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的开发者工具来进行快速获取

  1. # bing的"国内版"按钮xpath为'//*[@id="est_cn"]' 或者 全xpath为'/html/body/div[2]/div/div[3]/div[2]/div/div[1]'
  2. ################################################################################
  3. # 在selenium查找该div代码:
  4. driver.get('https://cn.bing.com/')
  5. button_element = driver.find_element_by_xpath('//*[@id="est_cn"]') #使用xpath
  6. print(button_element.text) # button_element.text结果为"国内版"
  7. # 或者
  8. driver.get('https://cn.bing.com/')
  9. button_element = driver.find_element_by_xpath('/html/body/div[2]/div/div[3]/div[2]/div/div[1]') #使用全xpath
  10. print(button_element.text) # button_element.text结果为"国内版"

4 根据name进行获取--find_element_by_name

find_element_by_name("元素的name")

例子:获取bing提交按钮元素

如下图所示,提交input的name为search

  1. ################################################################################
  2. # 在selenium查找提交按钮元素代码:
  3. driver.get('https://cn.bing.com/')
  4. input_element = driver.find_element_by_name('search')
  5. print(input_element.get_attribute('type')) # 结果为'submit'

5 根据tag name进行获取--find_element_by_tag_name

find_element_by_name("元素的tag name")

例子:获取bing的搜索表单form

  1. ################################################################################
  2. # 在selenium查找输入表单元素代码:
  3. driver.get('https://cn.bing.com/')
  4. form_element = driver.find_element_by_tag_name('form')
  5. 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

  1. ################################################################################
  2. # 在selenium查找输入表单元素代码:
  3. driver.get('https://cn.bing.com/')
  4. # button_element = driver.find_element_by_css_selector('#est_switch .est_selected') #唯一
  5. # button_element = driver.find_element_by_css_selector('#est_switch .est_common') #其实bing中这个css还有"国际版"按钮,但是"国内版"是符合条件的第一个元素,所以最后获取到的还是"国内版"按钮
  6. # 还记得find_element_by_class_name中bing的"国内版"按钮class name为'est_common est_selected'吗?
  7. #其实对于这种带空格的class name,使用find_element_by_css_selector获取更加方便和准确
  8. button_element = driver.find_element_by_css_selector('.est_common.est_selected')
  9. print(button_element.text) # 结果为'国内版'

find_element_by_link_text("链接元素的文本")

例子:

如下图所示,bing首页图片链接的text为“图片”

  1. ################################################################################
  2. # 在selenium查找"图片"链接元素代码:
  3. driver.get('https://cn.bing.com/')
  4. link_element = driver.find_element_by_link_text('图片')
  5. print(link_element.text) # 结果为'图片'

find_element_by_partial_link_text("链接元素的部分文本")
  1. ################################################################################
  2. # 在selenium查找"图片"链接元素代码:
  3. driver.get('https://cn.bing.com/')
  4. link_element = driver.find_element_by_partial_link_text('图')
  5. # link_element = driver.find_element_by_partial_link_text('片') #这样也可以
  6. 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

  1. ################################################################################
  2. # 在selenium查找该div代码:
  3. driver.get('https://cn.bing.com/')
  4. # button_element = driver.find_element(By.ID, 'est_cn')
  5. # button_element = driver.find_element(By.XPATH, '//*[@id="est_cn"]')
  6. button_element = driver.find_element(By.CSS_SELECTOR, '.est_common.est_selected')
  7. print(button_element.text)t) # button_element.text结果为"国内版"

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/690723
推荐阅读
相关标签
  

闽ICP备14008679号