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

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"]))breakexcept:continue

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

def send_tkey(loc:list, ctx, clear=True):time.sleep(random.random())obj = Noneif 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.lryc.cn/news/247476.html

相关文章:

  • Excel如何比较两列数据的不同
  • 力扣labuladong——一刷day47
  • 蓝桥杯-02-python组考点与14届真题
  • 【0240】源码分析PG内核中的关键字列表(SQL keywords)
  • 【Python深度学习第二版】学习笔记之——什么是深度学习
  • ddns-go部署在linux虚拟机
  • LeetCode Hot100 543.二叉树的直径
  • Breadcrumb面包屑(antd-design组件库)简单用法和自定义分隔符
  • Mybatis 源码搭建
  • shell编程系列(5)-函数的定义
  • 鸿蒙应用开发-初见:入门知识、应用模型
  • 通过测试驱动开发(TDD)的方式开发Web项目
  • 技巧-PyCharm中Debug和Run对训练的影响和实验测试
  • 【古月居《ros入门21讲》学习笔记】07_创建工作空间和功能包
  • 第20章多线程
  • 深信服防火墙设置应用控制策略(菜鸟必看)
  • 解锁 ElasticJob 云原生实践的难题
  • 鸿蒙开发已成新趋势
  • 万人拼团团购小程序源码系统+拼团设置+拼团管理 附带完整的搭建教程
  • 软信天成:速看!云端混合数据管理的最佳解决方案
  • GO 集成Prometheus
  • ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO
  • Springboot 中 指定 AspectJ 的织入模式
  • 【.NET全栈】.net的微软API接口与.NET框架源码
  • 【深度学习】基于深度学习的超分辨率图像技术一览
  • Android12强制所有应用跟随gsensor旋转
  • C#常用运算符的优先级
  • 鸿蒙4.0开发笔记之ArkTS语法的基础数据类型[DevEco Studio开发](七)
  • 集成学习的两种常见策略:bagging VS. boosting
  • 居家适老化设计第三十四条---卫生间之照明