pythone selenium 的第一次使用经历

最近要一直在网站上填报东西,不胜其烦,突然想到就没有什么东西能自动控制浏览器吗,于是就去一顿的搜索和ai询问,得到一个解决方案就是 selenium 的网站自动化测试工具可以实现。

一、初入江湖篇

  1. 首先,先去官网看了看介绍 selenium 官网地址:https://www.selenium.dev/ 里面有 webDriver 、IDE 、Gird, 看完介绍,在浏览器安装一个 IDE 来试试先。 先体验一下自动化的感觉。
    微信截图_20240704092811.png
  2. 然后你就会得到一个浏览器的插件 ,安装好插件以后,运行就会出来一个单独的浏览器框。


    微信截图_20240704093032.png

    微信截图_20240704093221.png

    微信截图_20240704093257.png

    3.最后按照教程去看看这玩意儿怎么用,大概就是创建一个任务,输入一个要访问的网站的链接,然后你就可以开始录制你的操作了,可以暂停,开始、最后录制完成点停止。然后就可以点击播放 将你刚刚录制的操作都重新来一遍以后就会暂停了。 最后,这个东西还可以导出代码。

二、小试牛刀

  1. 我在selenium IDE 导 代码的基础上进行了些调整,废话不多说 ,先贴完成的代码:
# Generated by Selenium IDE
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# options = Options()
# 指定Chrome的debug地址 和前面命令行中启动参数一致
# 这样,就会直接自动化刚才启动的浏览器
# options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

# driver = webdriver.Chrome(options=options)
driver = webdriver.Chrome()
driver.implicitly_wait(200)

driver.get("http://你自己的网站地址")
# 2 | setWindowSize | 1936x1056 |
driver.set_window_size(1936, 1056)

namelist = [
    'J2023-003号地块', 'KC2011-41号地块'
]

noR = []

driver.find_element(By.CSS_SELECTOR, '[placeholder="请输入专场标题"]').send_keys("2024昆明土地推介专场")
driver.find_element(By.CSS_SELECTOR, ".el-tag > .el-select__tags-text")

index = 0
print(len(namelist))


def test(i):
    if  i > len(namelist)-1:
        over()
        return

    print(f'现在执行到{i}')
    print(namelist[i])

    v = namelist[i]
    # 清空输入框
    driver.find_element(By.CSS_SELECTOR, ".el-transfer-panel:nth-child(1) .el-input__inner").clear()
    time.sleep(1)
    # 将地块名称写入输入框
    driver.find_element(By.CSS_SELECTOR, ".el-transfer-panel:nth-child(1) .el-input__inner").send_keys(v)
    time.sleep(2)
    
    
    querResult = driver.find_element(By.CSS_SELECTOR,
                                     ".el-transfer > .el-transfer-panel:first-child > .el-transfer-panel__body > .is-filterable").is_displayed()  # 判断元素是否是可见的
    print(querResult)
    # # 判断是否有查询结果,如果没有查询结果就存到一个数组中打印出来
    if querResult:
        # 选中查询结果  .is-filterable > .el-checkbox:first-child
        driver.find_element(By.CSS_SELECTOR,
                            ".el-transfer > .el-transfer-panel:first-child > .el-transfer-panel__body > .is-filterable > .el-checkbox:first-child").click()
        time.sleep(1)
        # 点击移动按钮将数据移动到右边的框中 .el-transfer__buttons > .el-button:nth-child(2)
        driver.find_element(By.CSS_SELECTOR, ".el-transfer__buttons > .el-button:nth-child(2)").click()
        time.sleep(1)
    else:
        noR.append(v)
        print(f"没查到数据的地块:{noR}")

    test(i + 1)

def over():
    print('结束')
    print(f'没有找到地块的数据:{noR}')
    # .form-btn > .btn-preserve
    driver.find_element(By.CSS_SELECTOR, ".form-btn > .btn-preserve").click()
    time.sleep(2)
    # driver.find_element(By.CSS_SELECTOR, ".el-transfer-panel:nth-child(1) .el-input__inner").click()
    driver.close()


test(index)

现在解释一下以上代码,主要是使用地块的名字主动去平台查询数据,容纳后查询出来的数据要自动填充到对应的框框内,使用的是递归的方式完成。 这里面要重点提几点:
1.首先你得去安装 selenium WebDriver , 可以使用命令 : pip install selenium。然后导入使用

  1. 不得不说一下这个方法 driver.implicitly_wait(200),简单的说,这是一个等待,传入的是等待的时间是以秒为单位,等待的是什么呢? 等待的就是如果你的 driver.find_element() 方法里面的元素没有出现在页面,没找到的时候,他就开始等待,当出现了代码才会继续执行,但不是无休止的等待下去,只会等待你设置的时间,时间一到还是没有出现你所要找的元素,就会报错。
  2. 可以看到我代码里面基本都用了 time.sleep() 方法,是因为有时候网络不好,请求数据出不来的时候,就会出现找不要的数据,所以为了保险起见,我都加了一个 sleep 。

具体的Selenium 的入门教程,推介去看B站这个老师的课程:https://www.bilibili.com/video/BV1RZ4y147zD?p=1&vd_source=5bf7f57e54503e3b35b5bf5d5138b720

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容