• Python+webdriver定位一组元素


    1、Python+Selenium定位一组元素

    • find_elements_by_id()
      获取一组相同id的元素
    • find_elements_by_name()
      获取一组相同name的元素
    • find_elements_by_class_name()
      获取一组相同class的元素
    • find_elements_by_link_text()
      获取一组相同link_text的元素
    • find_elements_by_partial_link_text()
      获取一组相同partial_link_text的元素
    • find_elements_by_tag_name()
      获取一组相同tag的元素
    • find_elements_by_xpath()
      获取一组相同xpath的元素
    • find_elements_by_css_selector()
      获取一组相同css的元素

    2、实例(1)定位hao123首页的一组元素,并随机点击其中一个元素.

     1 #-*-coding:utf-8-*-
     2 from selenium import webdriver
     3 import time
     4 import random
     5 
     6 driver = webdriver.Chrome()
     7 class LoginHao123():
     8     def login(self,browser):
     9         url = "https://www.hao123.com/"
    10         browser.get(url)
    11         browser.maximize_window()
    12 driver = webdriver.Chrome()
    13 LoginHao123().login(driver)
    14 elements = driver.find_elements_by_class_name('g-gc')#定位hao123首页的一组元素,得到一个列表
    15 m = random.randint(0,len(elements)-1)#随机数 
    16 elements[m].click()#随机点击列表中的一个元素
    17 handles = driver.window_handles
    18 driver.switch_to.window(handles[1])
    19 print(driver.title)

    #运行结果:
    22 D:Python3.7.2python.exe D:/PycharmProjects/MyScripts/定位一组元素.py 23 中国青年网_青年温度、青春靓度、青网态度
    24
    25 Process finished with exit code 0

     

    3、实例(2)定位酷狗音乐列表复选框,并选中其中几个元素.

     1 #-*-coding:utf-8-*-
     2 from selenium import webdriver
     3 import time
     4 driver = webdriver.Chrome()
     5 driver.get("https://www.kugou.com")
     6 driver.maximize_window()
     7 driver.find_element_by_tag_name("input").send_keys("成都")
     8 driver.find_element_by_class_name("searh_btn").click()
     9 time.sleep(3)
    10 elements = driver.find_elements_by_class_name("checkbox")#定位一组元素,得到一个列表
    11 for m in elements:
    12     m.click()
    13     time.sleep(1)

     

    遇到的问题及解决方法:

    要定位的class属性:search_icon checkbox,写成这样elements = driver.find_elements_by_class_name("search_icon checkbox")

    报错如下 :

    selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitte

    解决方法:

    1 . class值取其中之一
    title = driver.find_elements_by_class_name(“checkbox“)
    2.使用 css.selector,每个class值前面加 .
    title = driver.find_elements_by_css_selector(".search_icon.checkbox”)

    4. 实例(3)定位酷狗音乐列表复选框,全部选中,并取消几个选中的元素.

    可以使用pop()函数,也可以使用elements[3].click()再次点击即取消选中列表第3个元素

    pop()将列表指定位置的元素移除,同时可以将移除的元素赋值给某个变量,不填写位置参数则默认删除最后一位

    注意:使用pop()函数的效果是移除,elements.pop().click()效果即为勾选或者取消勾选elements列表中的元素,即移除elements列表中的元素后,列表中元素索引发生变化,列表重新排序,列表的长度发生变化


    1
    #-*-coding:utf-8-*- 2 from selenium import webdriver 3 import time 4 driver = webdriver.Chrome() 5 driver.get("https://www.kugou.com") 6 driver.maximize_window() 7 driver.find_element_by_tag_name("input").send_keys("成都") 8 driver.find_element_by_class_name("searh_btn").click() 9 time.sleep(3) 10 elements = driver.find_elements_by_class_name("checkbox")#定位一组元素,得到一个列表 11 for m in elements: 12 m.click() 13 time.sleep(1) 14 elements.pop(0).click()#勾选/取消勾选索引为0的元素,如果已被选中则该操作效果为取消勾选.勾选或者取消勾选之后,列表会重新排序,pop()的效果是移除,无论勾选还是取消勾选,elements列表中的一个元素被移除,列表长度发生变化. 15 print(len(elements)) 16 elements.pop(1).click()#勾选/取消勾选索引为1的元素,注意,elements列表受到上面pop(0)的影响,已经发生变化,列表更新后,此时为elements新列表中的索引为1的元素 17 print(len(elements)) 18 elements.pop(2).click()#勾选/取消勾选索引为2的元素,列表重新排序,此时为新列表中的索引为2的元素 19 print(len(elements)) 20 #运行结果: 21 D:Python3.7.2python.exe D:/PycharmProjects/MyScripts/定位一组元素2.py 22 29 23 28 24 27

    页面效果:

     

     

  • 相关阅读:
    白话机器学习的数学笔记系列1算法回归_一元回归+多项式回归
    使用verdaccio搭建npm私有库 pm2守护进程 nrm管理npm源
    Nginx笔记
    FileSystemResource 和 ClassPathResource 以及 ServletContextResource 获取资源用法
    ClickHouse 使用
    springboot整合nacos项目配置文件
    SpringBoot基础篇Bean之条件注入@ConditionalOnExpression
    java web项目服务端返回json结果时过滤字段为null的属性
    Navicat导出Excel格式表结构
    sql积累
  • 原文地址:https://www.cnblogs.com/yaoze2018/p/10692829.html
Copyright © 2020-2023  润新知