【bugo】【python web自动化】【selenium】python实现web自动化工具使用重点分析

举报
object 发表于 2025/10/29 15:45:47 2025/10/29
【摘要】 python实现web自动化

问题现象

之前听别人介绍过关于web自动化使用python实现,但是实践过程中还是遇到了不少问题,一一记录,难点。避免来回踩坑,针对某些场景下,无法通过接口来完成自动化的场景(例如一个按钮挂了超多的接口等等,你猜指的哪个按钮)。然后你需要重复点击步骤的时候,通过自动化selenium实现,确实会省去很多功夫。 前文有点长了。。。。

本文只展示部分关键代码

根因

1.chromedriver.exe下载难。

第一关就被难倒了,主要是一直没找到,很多网站推荐的是这个google的网站。
http__chromedriver.storage.googleapis.com/index.html
但实际这个网站只能下载113老版本的,一定要使用你浏览器对应的版本才行

你可以输入chrome://version/进行查看版本号
然后替换下面链接的版本号,反正我是通过这种的,我也不知道你的行不行
https__storage.googleapis.com/chrome-for-testing-public/141.0.7390.122/win64/chromedriver-win64.zip
通过这个网站找到上面的链接的,也把原始地址发出来吧:
https__googlechromelabs.github.io/chrome-for-testing/

2.定位元素 xpath

这个刚开始接触的时候最难的,因为自动化肯定要锁定元素,模拟操作。
这个也只能多试几遍了,多尝试。个人浅解xpath最简单,虽然我现在对xpath还是不熟
最简单的定位格式 xpath=“//div[@class=”" and @type=“”]//div[@class=“” and @type=“”]"
其中div为元素, 至于两个div是否挨着,隔了几层,这些都没关系,你只需要保证是前面包含后面就可以了,大概率不会有问题

3.模拟点击 execute_script

一般来说只有btn按钮才能点击,但实际web中,很多都是js触发的点击,不是实际的按钮,可能只是一个元素
就不能定位到元素后,直接click,用js模拟

    driver.execute_script("arguments[0].click();", phone_code_submit_button)

4. 等待元素加载完成

由于selenium是模拟web操作,自然页面就会有个加载的过程,如果过早模拟点击,就会失败,或者找不到元素,需要等待页面加载完成,一般有两种方式,建议使用第二种,当然两种可以一起用
1.time.sleep() 2.webDriverWait EC

    time.sleep(2)

    # 定位弹窗中的“获取验证码”按钮
    phone_code_submit_button = WebDriverWait(driver, 5).until(
        EC.element_to_be_clickable((By.XPATH, '//div[@class="button-base-box2"]//div[@class="dialog-btn dialog-btn"]'))
    )
    #phone_code_button.click()
    driver.execute_script("arguments[0].click();", phone_code_submit_button)

5.引入错依赖 webDriverWait EC

上面介绍的依赖,如果你直接import,可能会引入错误,会引入同名的另一个框架。一定要认准这个,否则你会怀疑人生,一直报错

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

6.driver,重要变量

driver能帮助我们操作很多东西,例如网页打开、cookie获取、元素获取等等,都是基于driver操作,所以你想要获取一个东西,但是不知道怎么获取,可以尝试通过driver获取,或者百度一下
我就简单列举一下,我用到的吧

# 打开网址
    driver.get('')
# 定位元素
    #username_input = driver.find_element(By.XPATH, '//form//input[@type="password" and @class="input"]')
    # 配合webderiverwate定位元素
    username_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//form//input[@class="userAccount"]'))
    )
# 模拟点击
    #button.click()
    driver.execute_script("arguments[0].click();", _button)
# 获取cookie
    cookies = driver.get_cookies()
#关闭浏览器
    driver.quit()

解决方案

关键代码展示

能读到这,看来你确实是新手,我展示部分关键代码,希望能帮助到你

    # 指定ChromeDriver的路径
    chrome_driver_path = 'D:\\xx\\xx\\xx\\chromedriver.exe'
    # 创建一个Service对象
    service = Service(executable_path=chrome_driver_path)
    # 创建Chrome浏览器实例
    driver = webdriver.Chrome(service=service)
    # 打开目标网站
    driver.get('url')
    # 使用相对路径定位用户名输入框 todo 需要替换自己的元素
    username_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//form//input[@class="userAccount"]'))
    )
    # 输入值
    username_input.send_keys('userAccount')
    # 定位点击元素
    login_button = WebDriverWait(driver, 10).until(
      EC.presence_of_element_located((By.XPATH, '//div//div[@class="login_btn"]'))
    )
    # 模拟点击
    # login_button.click()
    driver.execute_script("arguments[0].click();", login_button)
    # 关闭浏览器
    time.sleep(10)
    driver.quit()

好人到底吧,把import也弄出来

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。