当前位置:   article > 正文

Python---selenium 使用及定位_selenium定位a标签

selenium定位a标签

使用find_element_by_*() 方法只需导入 from selenium import webdriver,使用 find_element() 方法除了导入 from selenium import webdriver ,还要导入 from selenium.webdriver.common.by import By。

Selenium4 提供了 8 种定位(单)节点的方法,如下表所示:

方法说明

find_element(By.ID) 通过 id 属性值定位节点

find_element(By.NAME) 通过 name 属性值定位节点

find_element(By.CLASS_NAME) 通过 class 属性值定位节点

find_element(By.TAG_NAME) 通过 tag 标签名定位节点

find_element(By.LINK_TEXT) 通过<a>标签内文本定位节点,即精准定位。

find_element(By.PARTIAL_LINK_TEXT)通过<a>标签内部分文本定位节点,即模糊定位。

find_element(By.XPATH) 通过 xpath 表达式定位节点

find_element(By.CSS_SELECTOR) 通过 css 选择器定位节点

find_element 找的是第一个符合条件的节点,

如果要查找所有符合条件的标签,需要用 find_elements,find_elements 的返回值是列表类型,可以用for循环遍历里面的节点。

一、定位

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. # 创建浏览器对象并访问网站
  4. browser = webdriver.Chrome()
  5. url = "https://www.baidu.com"
  6. browser.get(url)
  7. # 根据 id 定位
  8. browser.find_element(By.ID,'su')
  9. # 根据 name 定位
  10. # 返回第一个元素
  11. browser.find_element(By.CLASS_NAME,'fenlei')
  12. # 返回所有元素
  13. browser.find_elements(By.CLASS_NAME,'fenlei')
  14. # 根据 class 定位
  15. browser.find_element(By.NAME,'title-text c-font-medium c-color-t')
  16. browser.find_elements(By.NAME,'title-text c-font-medium c-color-t')
  17. # 根据标签名称定位
  18. browser.find_element(By.TAG_NAME,'input')
  19. browser.find_elements(By.TAG_NAME,'input')
  20. # 使用链接文本定位超链接
  21. browser.find_element(By.LINK_TEXT,'index')
  22. browser.find_elements(By.LINK_TEXT,'index')
  23. browser.find_element(By.PARTIAL_LINK_TEXT,'index')
  24. browser.find_elements(By.PARTIAL_LINK_TEXT,'index')
  25. # 使用 xpath 定位
  26. browser.find_element(By.XPATH,'//input[@id="su"]')
  27. browser.find_elements(By.XPATH,'//input[@id="su"]')
  28. # 使用 CSS 选择器定位
  29. browser.find_element(By.CSS_SELECTOR,'#su')
  30. browser.find_elements(By.CSS_SELECTOR,'#su')
  31. # 关闭浏览器
  32. browser.close()
  33. # 父找子
  34. # 1.串联寻找
  35. print driver.find_element_by_id('B').find_element_by_tag_name('div').text
  36. # 2.xpath父子关系寻找
  37. print driver.find_element_by_xpath("//div[@id='B']/div").text
  38. # 3.css selector父子关系寻找
  39. print driver.find_element_by_css_selector('div#B>div').text
  40. # 4.css selector nth-child
  41. print driver.find_element_by_css_selector('div#B div:nth-child(1)').text
  42. # 5.css selector nth-of-type
  43. print driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text
  44. # 6.xpath轴 child
  45. print driver.find_element_by_xpath("//div[@id='B']/child::div").text
  46. driver.quit()
  47. # 子找父
  48. # 1.xpath: `.`代表当前节点; '..'代表父节点
  49. print driver.find_element_by_xpath("//div[@id='C']/../..").text
  50. # 2.xpath轴 parent
  51. print driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div").text
  52. # 哥哥节点
  53. # 1.xpath,通过父节点获取其哥哥节点
  54. print driver.find_element_by_xpath("//div[@id='D']/../div[1]").text
  55. # 2.xpath轴 preceding-sibling
  56. print driver.find_element_by_xpath("//div[@id='D']/preceding-sibling::div[1]").text
  57. # 弟弟节点
  58. # 1.xpath,通过父节点获取其弟弟节点
  59. print driver.find_element_by_xpath("//div[@id='D']/../div[3]").text
  60. # 2.xpath轴 following-sibling
  61. print driver.find_element_by_xpath("//div[@id='D']/following-sibling::div[1]").text
  62. # 3.xpath轴 following
  63. print driver.find_element_by_xpath("//div[@id='D']/following::*").text
  64. # 4.css selector +
  65. print driver.find_element_by_css_selector('div#D + div').text
  66. # 5.css selector ~
  67. print driver.find_element_by_css_selector('div#D ~ div').text

二、获取节点数据

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. browser = webdriver.Chrome()
  4. url = "https://www.baidu.com"
  5. browser.get(url)
  6. # 定位节点
  7. element = browser.find_element(By.ID,'su')
  8. # 获取class的属性值
  9. print(element.get_attribute('class'))
  10. # 获取id的属性值
  11. print(element.get_attribute('id'))
  12. # 获取type的属性值
  13. print(element.get_attribute('type'))
  14. # 获取value的属性值
  15. print(element.get_attribute('value'))
  16. browser.close()
  17. element1 = browser.find_element_by_link_text("地图")
  18. # 获取节点的宽高
  19. print(element1.size)

三、特殊节点处理(shadow dom)

此节点为动态加载的html标签,需要特殊处理(嵌入js语句切换到shadow dom节点里面获取相关数据,特别注意在shadow dom里面不可以使用xpath寻找元素,会报错显示找不到该元素)

  1. def expand_shadow_element(element):
  2. shadow_root = self.driver.execute_script('return arguments[0].shadowRoot', element)
  3. return shadow_root
  4. root1 = self.driver.find_element(By.XPATH, '/html/body/gradio-app')
  5. shadow_root1 = expand_shadow_element(root1)
  6. a = shadow_root1.find_element(By.ID, 'txt2img_prompt').find_element(By.TAG_NAME, 'textarea')
  7. a.click()
  8. a.clear()
  9. a.send_keys(self.in_word if self.in_word else 'sea')

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

闽ICP备14008679号