python + selenium

2023-11-11

selenium是一个模拟浏览器的类库,经常用来做自动化测试
python 可以直接使用安装目录下的Scripts\pip工具安装
以windows7 python3.4为例
运行cmd,
cd C:\Python34\Scripts
pip install selenium
一键安装完成,python脚本使用import selenium即可开始使用
下面是官网的一个例子:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()



模拟了用Firefox浏览器(本地电脑必须安装相关浏览器)
打开 www.python.org,然后输入框输入 pycon搜索的 流程
根据官方文档,目前支持的模拟浏览器有 Firefox, Chrome, Ie and Remote.
selenium用webdriver模拟浏览器,get方法打开网页
接下来是获取页面元素
elem = driver.find_element_by_name("q")
看函数的命名我们知道是根据元素的name属性来获取
selenium提供了以下元素获取方式:
  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
    (注:这些方式均只能获取匹配的第一个元素)
    • find_element_by_id ,find_element_by_name,class_name,tag_name
这些很简单,不多做解释,分别按元素的,id,name,class,tag属性来定位元素
  • find_element_by_xpath
文档说明是 定位XML节点,HTML可以看做XML的实现,你可以使用这个函数将节点绝对定位(但是不建议),也可以关联到一个有id和name属性的节点,这个定位器也可以用id,name之外的属性来定位
来看官网的例子:
<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>


我们可以这样定位form:
login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")


1.绝对定位,HTML只要有轻微的改变就会失效
2.找到HTML里的第一个form
3.找到id=loginForm的form
我们可以这样定位 username输入框:
username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")


1.第一个form元素的input子元素,子元素有name=username的属性
2. id=loginForm的form元素的第一个input子元素
3.第一个name=username的input元素
.....
  • find_element_by_link_text 和 find_element_by_partial_link_text
这两个是获取超链接的方法,我们可以用这个获取指定的链接文本的元素,但是这个方法只会返回第一个匹配的元素,如果没有匹配,会抛出一个 NoSuchElementException的异常,partial官网没有多作说明,使用的应该是部分匹配,输入目标文本的子串匹配即可
继续官网的例子
<html>
 <body>
  <p>Are you sure you want to do this?</p>
  <a href="continue.html">Continue</a>
  <a href="cancel.html">Cancel</a>
</body>
<html>


我们这样获取 Continue超链接(注意:匹配的是a标签之间的文本内容)
continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')


   
   
  • find_element_by_css_selector
这个方式如果了解JQuery和CSS的人应该不陌生,使用CSS选择器,这个应该是最强大的功能了,详细可以查阅
CSS选择器

如果想获取多个元素,讲上面的选取方法(除去id唯一的方法),element单词后面加s即为多选的选择器,返回一个python list
   
   
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector



send_keys是模拟键盘的输入,
特殊字符例如Enter,ALT,F1需要引入下面的模块,然后用相应的代码表示
selenium.webdriver.common.keys


官网地址:selenium-python.readthedocs.org
翻译地址:https://github.com/StephinChou/seleniumDocument

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python + selenium 的相关文章

  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • Selenium Grid2 - 远程节点未连接到集线器

    我当前的设置是我有一个 selenium RC 作为 Windows 机器上的集线器运行 假设机器名称是 machine name com 我使用以下命令来启动它 java jar selenium server2 15 jar role
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • 如何使用 Boto3 启动具有 IAM 角色的 EC2 实例?

    我无法弄清楚如何使用指定的 IAM 角色在 Boto3 中启动 EC2 实例 以下是迄今为止我如何成功创建实例的一些示例代码 import boto3 ec2 boto3 resource ec2 region name us west 2
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐

  • Odoo多公司指南

    启动环境 首先新建一个odoo12环境 并在应用列表中搜索sales并安装 开启多公司功能 打开settings页面 然后点击点击General Settings 接着再勾选Multi companies之后点击保存 页面会重新加载 再次回
  • MSSQL更改数据库文件路径

    MSSQL 数据库文件变更目录 1 变更数据库文件指向 2 关闭数据库 3 移动数据库文件 4 给文件和目录添加NT Service MSSQLSERVER用户的完全控制权限 5 启动数据库 6 注意事项 1 变更数据库文件指向 查到真实名
  • 智慧门店对实体商家的价值始于连接和引流

    刷脸成为了现实 各地实行刷脸的试点都取得成功 刷脸也就这样的走进我们的生活 不需要带手机 钱包 直接选择刷脸 当然 方便的还是无须等待排队 原本一个收银台需要配备一名收银员 所以考虑人力成本收银柜台数量是有限的 但是使用刷脸支付 商家可以同
  • 顺序主子式的英文翻译(定义)

    顺序主子式的英文翻译 定义 为了查明顺序主子式的英文翻译 我在国内知网翻译助手 金山词霸等诸多翻译系统查了一下 给出的答案不外乎以下几个答案 知网翻译助手的答案 我喜欢刨根问底 很明显这样的答案就是中式英语 经过一番努力好 终于找到正确答案
  • Qt 在主界面程序中,调用子界面(另一个界面)的控件

    问题 在主界面程序mainwindow cpp中 想调用子界面 另一个界面 上的控件 已经在 pro工程中添加好了一个设计师界面类作为子界面 这里我在工程中添加的是show netlist dialog cpp h ui 解决步骤 1 在子
  • MYSQL查询一对多的数据表关联,产生重复数据怎么处理

    在 MySQL 中 当进行一对多的数据表关联查询时 有时会导致结果中出现重复数据的情况 这是由于多个关联的子表记录与主表记录进行了笛卡尔积 从而产生了重复的结果 为了处理这种情况 可以使用以下方法之一 使用DISTINCT关键字 可以在查询
  • micropython Esp32 外接LED使用Thonny ValueError: pin can only be input解决办法

    micropython Esp32 外接LED使用Thonny ValueError pin can only be input解决办法 1 连接方式如下图 注意一定要加电阻 2 通过输入以下代码 报错 ValueError pin can
  • 关于vscode调试php

    1 PHP 5 4 0起 CLI SAPI 提供了一个内置的Web服务器 URI请求会被发送到PHP所在的的工作目录 Working Directory 进行处理 除非你使用了 t参数来自定义不同的目录 如果请求未指定执行哪个PHP文件 则
  • 【查询代码提交数】

    后端 shell git log all since 2021 10 01 until 2021 12 31 format aN sort u while read name do echo en name t git log all si
  • draw.io基础使用

    转自 Draw io 一款强大且支持在线编辑和到处的画图软件 转自 https blog csdn net feeltouch article details 105476275
  • Buildroot笔记

    CSDN仅用于增加百度收录权重 排版未优化 日常不维护 请访问 www hceng cn 查看 评论 本博文对应地址 https hceng cn 2019 09 05 Buildroot E7 AC 94 E8 AE B0 more 整理
  • 三菱系统四轴正反转参数_三菱M70四轴调试

    三菱M70四轴安装 放大器 MDS D SVJ3 10 马达型号 HF104 1 放大器的旋钮开关 SW1 X 0 Y 1 Z 2 4轴 3 主轴 4 注 3合一的放大器 4轴 4 2 参数设置 先输入参数修改密码 MPARA 1 基本规格
  • cookie 封装

    npm i universal cookie npm i vueuse integrations 1 新建 utils storage js import useCookies from vueuse integrations useCoo
  • 若依框架——使用自定义用户表登录系统

    修改数据库配置 修改登录用户表 原JavaBean package com ruoyi common core domain entity import java util Date import java util List import
  • 很有道理的十句话

    第一句如果我们之间有1000 步的距离 你只要跨出第1 步我就会朝你的方向走其余的 999步 第二句 通常愿意留下来跟你争吵的人 才是真正爱你的人 第三句付出真心 才会得到真心 却也可能伤得彻底保持距离 就能保护自己 却也注定永远寂寞 第四
  • antd上传组件使用fileList属性展示图片,onchage事件只会执行一次的问题

    在工作中使用到了antd的照片墙组件时 遇到了官方文档上提出的一个问题 然而官方的解答是回退版本 看了github上网友留言 加上自己测试 找到一种解决方式 一定要在判断 等于 uploading状态的时候进行一次setState 之后在d
  • 通过华为杯竞赛、高教社杯和数学建模国赛实现逆袭;助力名利双收

    文章目录 赛事介绍 参赛好处 辅导比赛 写在最后 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛 该竞赛旨在通过实际问题的建模和解决 培养研究生的创新能力和团队合作精神 推动科技创新和应用 华为杯竞
  • python:类

    类与对象 Python从设计之初就已经是一门面向对象的语言 面向对象编程OOP是一种程序设计思想 它把对象作为程序的基本单元 一个对象包含了数据和操作数据的函数 面向过程的程序设计把计算机程序视为一系列的命令集合 即一组函数的顺序执行 为了
  • Ubuntu20.04系统使用笔记

    笔者安装的ubuntu版本是20 04 双系统安装 参考教程 link 用于深度学习 总共给ubuntu的空间为200GB 交换区分l8GB 16GB内存 EFI系统分区1GB 剩余181GB全给根目录 操作记录 使用命令sudo ubun
  • python + selenium

    selenium是一个模拟浏览器的类库 经常用来做自动化测试 python 可以直接使用安装目录下的Scripts pip工具安装 以windows7 python3 4为例 运行cmd cd C Python34 Scripts pip