当前位置: 首页 > article >正文

selenium 工具 的基本使用

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

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

pip安装得现在最新(20231128)版本(4.15.2), 下面做下操作记录。
在这里插入图片描述
引入模块

# 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
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)

等待页面打开

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

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

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())

使用方法:

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

定位器的基本用法

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: 写这类工具,如果不急, 一定要多加延时控制,有一定的反“反爬机制”, 也对服务器有好一点,大家好。


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

  • Selenium switch_to 方法
  • Selenium 中操作 iframe,别再说你不会了
  • selenium 定位元素(包括父子,兄弟)及常见操作
  • getElementsByName 方法、getElementsByTagName 方法、document 对象三个查询方法的使用注意事项、dom 对象查询练习、document 对象补充说明
  • ubuntu 系统提示
  • ipython 运行 ipython 运行 ipynb
  • seleniumhq.github.io

http://www.kler.cn/a/154044.html

相关文章:

  • RabbitMQ的基本概念和入门
  • OceanBase 分区表详解
  • 黑马智数Day10
  • RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)
  • 风电电力系统低碳调度论文阅读第一期
  • 006.精读《Apache Paimon Docs - Concepts》
  • 深度学习实战62-强化学习在简单游戏领域的应用,利用强化学习训练Agent程序的代码和步骤
  • 工博会新闻稿汇总
  • LuatOS-SOC接口文档(air780E)--pwm - PWM模块
  • 设计模式 创建者模式
  • 今天给大家分享一套Python入门基础测试题,大家看看都会做吗?
  • 商城系统通过Kafka消息队列,实现订单的处理和状态更新
  • 快速掌握Pyqt5的9种显示控件
  • 2243:Knight Moves
  • postman接口测试教程与实例分享
  • mysql查询用户每年每月的订单数量及订单金额
  • 解决Flutter报错boxconstraints has non-normalized height/width constraints
  • 设计模式-结构型模式之组合、享元设计模式
  • 最长连续递增序列
  • [学习记录]Node event loop 总结流程图
  • STL--位图的介绍与使用
  • 以热爱的态度对待生活,就是最自己的温柔
  • 软著项目推荐 深度学习疲劳驾驶检测 opencv python
  • 线程的状态
  • 详解原生Spring框架下的方法切入点表达式
  • 【IEEE出版|往届均已成功EI检索】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)