selenium 工具 的基本使用

公司每天要做工作汇报,汇报使用的网页版, 所以又想起 selenium 这个老朋友了。

再次上手,发现很多接口都变了, 怎么说呢, 应该是易用性更强了, 不过还是得重新看看, 我这里是python3。

pip安装得现在最新(20231128)版本(4.15.2), 下面做下操作记录。

引入模块

python 复制代码
# selenium 导入
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
python 复制代码
options =Options()
# 为了防止频繁启动终端,可以端口远程一个的方案
# /opt/google/chrome/chrome --remote-debugging-port=9527
crom_url = '127.0.0.1:9527'
options.add_experimental_option("debuggerAddress", crom_url)

epth = './3ds/chromedriver_linux64/chromedriver'
# 这里不太一样, 加了个ChromeService抽象层, 我认为更加合理
service = webdriver.ChromeService(executable_path=epth)
driver = webdriver.Chrome(service=service, options=options)

等待页面打开

python 复制代码
while True:
    driver.get("网址")
    try:
        WebDriverWait(driver, 60, 0.5).until(EC.presence_of_element_located([By.ID, "workBox"]))
        break
    except:
        continue

新版本的定位器不一样了, 我写了个定位发送内容得功能。

python 复制代码
def send_tkey(loc:list, ctx, clear=True):
    time.sleep(random.random())
    obj = None
    if isinstance(loc[0], list):
        for l in loc:
            if len(l) == 2: l.append(0)
            if obj is None:
                obj = driver.find_elements(*l[:2])[l[2]]
            else:
                obj = obj.find_elements(*l[:2])[l[2]]
    else:
        if len(loc) == 2: loc.append(0)
        obj = driver.find_elements(*loc[:2])[loc[2]]
    if clear:
        obj.clear()
        time.sleep(random.random())
    for e in ctx:
        if isinstance(e, list):
            obj.send_keys(*e)
        else:
            obj.send_keys(e)
        time.sleep(random.random())

使用方法:

python 复制代码
#													 前面是定位器参数,               输入内容
send_tkey([[By.CLASS_NAME,'class1'],[By.TAG_NAME,'input']],'工作内容!',False)

定位器的基本用法

python 复制代码
driver.find_elements(By.CLASS_NAME,'class1')[0].find_element(By.TAG_NAME,'input').send_keys(Keys.ENTER)

driver.find_elements(By.CLASS_NAME,'class1')[0].find_element(By.TAG_NAME,'input').click()

PS: 写这类工具,如果不急, 一定要多加延时控制,有一定的反"反爬机制", 也对服务器有好一点,大家好。


参考(项目做了一段时间,可能没有列完, 感谢大家的分享)

相关推荐
PhotonixBay21 小时前
增材制造表面粗糙度测量:3D共聚焦多尺度方法
功能测试·测试工具·共聚焦显微镜·增材制造·测试标准
硬禾科技2 天前
连接世界的工程哲学
嵌入式硬件·测试工具·自动化·硬件工程
wuhuhuan2 天前
Case Generator 平台升级
python·测试工具·自动化
柒儿吖2 天前
SSCom 重构全记录:用 Rust 把串口调试助手送上鸿蒙 PC、macOS、Windows和Linux
测试工具·rust·harmonyos
AngusKit2 天前
AngusTester 与 Postman、MeterSphere:私有化统一测试怎么选
测试工具·jmeter·压力测试·metersphere·web测试·移动端测试
蒲公英内测分发2 天前
App 更新一次就换一个二维码?智能硬件配套 App 的版本和下载入口怎么管理
人工智能·测试工具·智能家居·智能硬件
测试老哥3 天前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
是Leo刘啊3 天前
别再手敲 JSON 造数据了!Mock 数据生成器实战与避坑指南
测试工具
Luminbox紫创测控3 天前
航天热平衡试验用太阳模拟器:光学积分器设计与均匀性提升方法
测试工具·安全性测试·太阳光模拟器·测试标准·航天热平衡实验
程序员杰哥3 天前
UI自动化测试:Jenkins配置
自动化测试·软件测试·python·测试工具·职场和发展·jenkins·测试用例