selenium知识点大全

news/2024/10/31 3:30:59/

selenium知识点大全

在使用selenium之前必须先配置浏览器对应版本的webdriver。

1. 初始化浏览器对象

from selenium.webdriver import Chrome# 创建浏览器对象,并且打开一个空的页面
browser = Chrome()# 关闭浏览器
browser.close()

2. 访问指定网页

from selenium import webdriver# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()# 访问百度首页
browser.get(r'https://www.baidu.com/')# 浏览器截图
browser.get_screenshot_as_file('截图.png')# 关闭浏览器
browser.close()

3. 设置浏览器大小

from selenium import webdriver
import timebrowser = webdriver.Chrome()# 设置浏览器大小:全屏
browser.maximize_window()
browser.get(r'https://www.baidu.com')
time.sleep(2)# 设置分辨率 500*500
browser.set_window_size(500, 500)
time.sleep(2)# 设置分辨率 1000*800
browser.set_window_size(1000, 800)
time.sleep(2)# 关闭浏览器
browser.close()

4. 刷新页面

from selenium import webdriver
import time  browser = webdriver.Chrome()# 设置浏览器全屏
browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)try:# 刷新页面browser.refresh()  print('刷新页面')
except Exception as e:print('刷新失败')# 关闭浏览器
browser.close()

5. 前进和后退

from selenium import webdriver
import time  browser = webdriver.Chrome()# 设置浏览器全屏
browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)# 打开淘宝页面
browser.get(r'https://www.taobao.com')  
time.sleep(2)# 后退到百度页面
browser.back()  
time.sleep(2)# 前进到淘宝页面
browser.forward() 
time.sleep(2)# 关闭浏览器
browser.close()

6. 获取页面基本属性

from selenium import webdriverbrowser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')# 网页标题
print(browser.title)
# 当前网址
print(browser.current_url)
# 浏览器名称
print(browser.name)
# 网页源码
print(browser.page_source)

7. 定位标签

browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,'wd')
browser.find_element(By.CLASS_NAME,'s_ipt')
browser.find_element(By.TAG_NAME,'input')
browser.find_element(By.LINK_TEXT,'新闻')
browser.find_element(By.PARTIAL_LINK_TEXT,'闻')
browser.find_element(By.XPATH,'//*[@id="kw"]')
browser.find_element(By.CSS_SELECTOR,'#kw')

8. get_attribute获取标签属性

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get(r'https://www.baidu.com')# 通过class属性值获取标签
logo = browser.find_element(By.CLASS_NAME,'index-logo-src')
print(logo)# 获取标签的src属性
print(logo.get_attribute('src'))# 关闭浏览器
browser.close()

9. 获取标签内容

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get(r'https://www.baidu.com')# 通过css选择器选中标签
logo = browser.find_element(By.CSS_SELECTOR, '#hotsearch-content-wrapper > li:nth-child(1) > a')
# 获取标签的标签内容
print(logo.text)
# 获取标签的href属性
print(logo.get_attribute('href'))# 关闭浏览器
browser.close()

10. 获取其他属性

除了属性和文本值外,还有id、位置、标签名和大小等属性。

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get(r'https://www.baidu.com')logo = browser.find_element(By.CLASS_NAME, 'index-logo-src')
# 获取标签的id
print(logo.id)
# 获取标签的位置
print(logo.location)
# 获取标签的标签名
print(logo.tag_name)
# 获取标签的大小
print(logo.size)# 关闭浏览器
browser.close()

11. 页面交互操作

  1. 输入文本:标签.send_keys(输入内容)

  2. 点击:标签.click()

  3. 清空输入框:标签.clear()

  4. 回车确认:标签.submit()

  5. 单选:单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。

  6. 多选:多选好像也比较容易,依次定位需要选择的元素,点击即可。

  7. 下拉框:下拉框的操作相对复杂一些,需要用到Select模块。

    我们来进行演示一波,由于暂时没找到合适的网页,我这边写了一个简单的网页本地测试(文件存为 demo.html)

    <html><body><form>
    <select name="帅哥"><option value="才哥">才哥</option><option value="小明" selected="">小明</option><option value="小华">小华</option><option value="草儿">小草</option>
    </select>
    </form></body>
    </html>
    

    然后,再演示下拉框的不同选择的方式

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.common.by import By
    import timeurl = 'file:///Users/yuting/Work/%E6%8E%88%E8%AF%BE/Python2206/01%E8%87%AA%E5%8A%A8%E5%8A%9E%E5%85%AC/day11-turtle%E7%9A%84%E4%BD%BF%E7%94%A8/demo.html'browser = webdriver.Chrome()browser.get(url)
    time.sleep(2)# 获取下来列表对应的标签
    select_tag = browser.find_element(By.NAME, "帅哥")# 根据索引选择
    Select(select_tag).select_by_index("2")
    time.sleep(2)
    # 根据value值选择
    Select(select_tag).select_by_value("草儿")
    time.sleep(2)
    # 根据文本值选择
    Select(select_tag).select_by_visible_text("才哥")
    time.sleep(2)# 关闭浏览器
    browser.close()
    

12. 选项卡切换

我们在访问网页的时候会打开很多个页面,在Selenium中提供了一些方法方便我们对这些页面进行操作。

current_window_handle:获取当前窗口的句柄。

window_handles:返回当前浏览器的所有窗口的句柄。

switch_to_window():用于切换到对应的窗口。

from selenium import webdriver
import timebrowser = webdriver.Chrome()# 打开百度
browser.get('http://www.baidu.com')
# 新建一个选项卡
browser.execute_script('window.open()')
print(browser.window_handles)
# 跳转到第二个选项卡并打开知乎
browser.switch_to.window(browser.window_handles[1])
browser.get('http://www.zhihu.com')
# 回到第一个选项卡并打开淘宝(原来的百度页面改为了淘宝)
time.sleep(2)
browser.switch_to.window(browser.window_handles[0])
browser.get('http://www.taobao.com')

13. 模拟鼠标操作

既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。

from selenium.webdriver.common.action_chains import ActionChains

13.1 左键

这个其实就是页面交互操作中的点击click()操作。

13.2 右键:

context_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')
time.sleep(2)# 定位到要右击的元素,这里选的新闻链接
right_click = browser.find_element(By.LINK_TEXT, '新闻')# 执行鼠标右键操作
ActionChains(browser).context_click(right_click).perform()
time.sleep(2)# 关闭浏览器
browser.close()

在上述操作中:

ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数传入

context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数

perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作

13.3 双击:double_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')
time.sleep(2)# 定位到要双击的元素
double_click = browser.find_element(By.CSS_SELECTOR, '.accessibility-icon')# 双击
ActionChains(browser).double_click(double_click).perform()
time.sleep(15)# 关闭浏览器
browser.close()

13.4 拖拽

drag_and_drop(source,target)拖拽操作,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。

我们以菜鸟教程的一个案例来进行演示:

https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
time.sleep(2)browser.switch_to.frame('iframeResult')# 开始位置
source = browser.find_element(By.CSS_SELECTOR, "#draggable")# 结束位置
target = browser.find_element(By.CSS_SELECTOR, "#droppable")# 执行元素的拖放操作
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
# 拖拽
time.sleep(15)# 关闭浏览器
browser.close()

13.5 悬停:

move_to_element()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url)
time.sleep(2)# 定位悬停的位置
move = browser.find_element(By.ID, "s-usersetting-top")# 悬停操作
ActionChains(browser).move_to_element(move).perform()
time.sleep(5)# 关闭浏览器
browser.close()

14. 模拟键盘操作

selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。

引入Keys

from selenium.webdriver.common.keys import Keys

send_keys(Keys.BACK_SPACE):删除键(BackSpace)

send_keys(Keys.SPACE):空格键(Space)

send_keys(Keys.TAB):制表键(TAB)

send_keys(Keys.ESCAPE):回退键(ESCAPE)

send_keys(Keys.ENTER):回车键(ENTER)

send_keys(Keys.CONTRL,‘a’):全选(Ctrl+A)

send_keys(Keys.CONTRL,‘c’):复制(Ctrl+C)

send_keys(Keys.CONTRL,‘x’):剪切(Ctrl+X)

send_keys(Keys.CONTRL,‘v’):粘贴(Ctrl+V)

send_keys(Keys.F1):键盘F1

send_keys(Keys.F12):键盘F12


http://www.ppmy.cn/news/40685.html

相关文章

运营商大数据获客是什么,是如何实现精准获客的

长久以来&#xff0c;企业希望自己的产品获得更多的客户&#xff0c;那么就需要花钱做推广和营销。然而随着互联网和自媒体的发展&#xff0c;并不是钱花出去了&#xff0c;就能带来有效的流量和高质量的客户&#xff0c;费效比太高&#xff0c;精准度太差&#xff0c;没有好的…

智慧城市发展会遇到那些问题和挑战?

我国在国际和国家智慧城市标准化工作中虽已取得了积极进展&#xff0c;但由于智慧城市系统复杂、参与方多、演进较快等特征&#xff0c;我国智慧城市标准化工作仍面临诸多问题和挑战。 北京智汇云舟科技有限公司成立于2012年&#xff0c;专注于创新性的“视频孪生(实时实景数字…

【K8S系列】Pod详解

目录 序言 1 前言 2 为什么需要pod 3 什么是Pod&#xff1f; 3.1 Pod的组成 3.2 Pod的用途 3.3 Pod的生命周期 3.4 Pod的特点 4 Pod的使用 5 结论 序言 任何一件事情&#xff0c;只要坚持六个月以上&#xff0c;你都可以看到质的飞跃。 今天学习一下K8s-Pod相关内容&…

nodejs篇 express(1)

文章目录前言express介绍安装RESTful接口规范express的简单使用一个最简单的服务器&#xff0c;仅仅只需要几行代码便可以实现。restful规范的五种接口类型请求信息req的获取响应信息res的设置中间件的使用自定义中间件解决跨域nodejs相关其它内容前言 express作为nodejs必学的…

什么是DDI?DDI有哪些功能特点?(中科三方)

什么是DDI&#xff1f; DDI代表DNS、DHCP和IP地址管理&#xff08;IPAM&#xff09;&#xff0c;通常用这三个网络核心组件的缩写来表示一种网络集成管理解决方案。其中DNS提供IP地址&#xff0c;DHCP分配地址&#xff0c;IPAM管理IP地址资源&#xff0c;DDI将DNS、DHCP和IP地…

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码&#xff0c;查询手机号在网状态&#xff0c;返回在网、在网不可用、不在网&#xff08;销号/未启用/停机&#xff09;等多种状态&#xff0c;查询手机号在网状态之后&#xff0c;可以根据具体的业务需求来进行不同的处理。 本文主要介…

python代码交叉编译成so文件

项目中使用python做算法处理。为了保护源代码&#xff0c;因此编译成so后执行。一开始代码只运行在x86平台&#xff0c;因此编译的时候&#xff0c;直接调用python3 setup.py build_ext --inplace就可以了。但是这两天需要将算法移植到arm平台&#xff0c;但是编译环节还是在x8…

【C++】STL之list的使用和模拟实现

有了之前两个STL中容器和数据结构初阶链表的学习基础&#xff0c;下面list的学习将会简单很多。 目录 &#xff08;一&#xff09;list的介绍和使用 &#xff08;1&#xff09;list的介绍 &#xff08;2&#xff09;list的使用 &#xff08;二&#xff09;模拟实现list &a…