• Selenium+Python系列环境搭建及 元素定位那些事


    一、环境搭建

    1、Python环境搭建

    使用版本:

    • Mac系统

    • Python 3.10.8

    • Selenium4.5.0

    python的安装:

    https://www.python.org/下载安装.

    终端输入python3,如下图所示:

    2、安装Selenium及驱动:

    selenium类库安装

    pip3 install selenium

    驱动类库安装(告别手动下载驱动包)

    pip install webdriver-manager

    安装完成,如下图所示:

    这里有一个警告,是pip3命令需要进行升级(pip是一个用于安装及维护Python包的命令) 

    1、第一个脚本

    环境基本搞定了,使用pycharm创建好工程后,运行如下代码:

    1. # -*- coding: utf-8 -*-
    2. """
    3. @Time :2022/10/18 10:21 PM
    4. @File :demo.py
    5. @IDE :PyCharm
    6. @Motto:ABC(Always Be Coding)
    7. """
    8. from selenium import webdriver
    9. from webdriver_manager.chrome import ChromeDriverManager
    10. driver = webdriver.Chrome(ChromeDriverManager().install())
    11. driver.get("https://www.baidu.com/")
    12. driver.quit()

    2、可能遇到的问题

    就像我一样,把代码复制到编译器里运行报错,如下图所示:

    3、解决办法

    终端输入如下:pip install packaging

    注意: 这些pip命令也要在Pycharm中输入,如下图所示:

    成功解决问题,这里要吐槽下自己,度娘后发现,居然是缺少类库引起,真的是笨的可以,哭笑不得,哈哈哈! 

    4、运行效果

    三、元素定位

    这部分内容可以说是重中之重了,也是大部分写web自动化的同学,必会入门技能之一了。

    1、常见八种定位元素方法

    我们还是直接来看源代码吧,示例如下:

    1. # Licensed to the Software Freedom Conservancy (SFC) under one
    2. # or more contributor license agreements. See the NOTICE file
    3. # distributed with this work for additional information
    4. # regarding copyright ownership. The SFC licenses this file
    5. # to you under the Apache License, Version 2.0 (the
    6. # "License"); you may not use this file except in compliance
    7. # with the License. You may obtain a copy of the License at
    8. #
    9. # http://www.apache.org/licenses/LICENSE-2.0
    10. #
    11. # Unless required by applicable law or agreed to in writing,
    12. # software distributed under the License is distributed on an
    13. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    14. # KIND, either express or implied. See the License for the
    15. # specific language governing permissions and limitations
    16. # under the License.
    17. """
    18. The By implementation.
    19. """
    20. class By:
    21. """
    22. Set of supported locator strategies.
    23. """
    24. ID = "id"
    25. XPATH = "xpath"
    26. LINK_TEXT = "link text"
    27. PARTIAL_LINK_TEXT = "partial link text"
    28. NAME = "name"
    29. TAG_NAME = "tag name"
    30. CLASS_NAME = "class name"
    31. CSS_SELECTOR = "css selector"

    2、根据id定位元素

    driver.find_element(By.ID,"kw")

    3、根据xpath定位元素

    driver.find_element(By.XPATH, '//*[@id="kw"]')

    4、根据css定位器定位元素

    driver.find_element(By.CSS_SELECTOR, '#kw')

    5、根据name属性值定位元素

    driver.find_element(By.NAME, 'wd')

    6、根据class_name类名定位元素

    driver.find_element(By.CLASS_NAME, 's_ipt')

    7、根据链接文本定位元素

    driver.find_element(By.LINK_TEXT, 'hao123')

    8、根据部分链接文本定位元素

    driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')

    9、根据标签名定位元素

    driver.find_element(By.TAG_NAME, 'input')

    四、find_element与find_elements区别

    • find_elemnet:定位到是一个对象,定位不到则报错。

    • find_elemnets:定位到是一个含元素的列表,定位不到是一个空列表。

    五、值得关注的问题

    1、举个栗子

    1. # 这句运行直接报错
    2. driver.find_element_by_id('kw').send_keys('python')
    3. # 这句就正常
    4. driver.find_element(By.ID,"kw").send_keys(u"111 3333")

    2、为什么报错

    来吧,还是直接看源代码学习,如下所示:

     不难看出,最新版本只能通过find这种写法去写,已经不支持老版本写法。

  • 相关阅读:
    electron打包下载资源失败,设置国内镜像
    SVN教程-SVN的基本使用
    MT8665 Android 5.1 I2C驱动,非DMA方式,无法读写超过8个字节的问题的修改
    建站系列(四)--- Web服务器之Apache、Nginx
    二分脚本-自己使用
    Docker安装mysql 5.7主从复制
    Diverse Branch Block论文中对于串联卷积的融合中的一些理解点
    ceph集群的搭建
    Go-Excelize API源码阅读(十一)—— GetActiveSheetIndex()
    Vue 组件化
  • 原文地址:https://blog.csdn.net/caixiangting/article/details/127447768