当前位置:网站首页>selenium模块
selenium模块
2022-07-30 05:59:00 【HHYZBC】
目录
selenium是什么
Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题。下面就进入正式的 study 阶段。
selenium安装
pip install selenium
使用selenium打开浏览器
# 声明浏览器对象
# 导入selenium模块
from selenium import webdriver # webdriver 网络驱动
chrome = webdriver.Chrome() # 谷歌浏览器
firefox = webdriver.Firefox() # 火狐浏览器
edge = webdriver.Edge() # Edge浏览器
phantomjs = webdriver.phantomjs() # phantomjs浏览器
safari = webdriver.Safari() # 苹果浏览器使用webdriver方法声明浏览器对象,会返回一个浏览器对象,后面所有的操作都是在此对象上进行操作的。
需要注意的是,在使用selenium打开浏览器前,需要下载相对应的浏览器驱动才能使用,下载教程网上有很多,这里就不过多介绍了。
使用selenium访问页面
chrome.get(url)使用get方法向某个url发送get请求。
使用selenium获取网页中的某个节点
在最新版本中,使用selenium获取节点只有两个方法
- find_element()
- find_elements()
需要传入两个参数,第一个参数为使用哪个方法进行查找,第二个参数表示具体的值。
支持使用使用下列方法获取节点:
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"by_link_text和by_partial_link_tex的区别:全部文本和包含某个文本
如:
from selenium.webdriver.common.by import By
input = browser.find_element(By.ID, "q")find_element和find_elements的区别:
多了个s就返回列表,没有s就返回匹配到的第一个标签对象
find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表
使用selenium对某个节点交互
- 清空文字 clear方法
- 输入文字 send_keys方法
- 点击按钮 click方法
获取某个节点的属性
- get_attribute('属性名')
- 获取某个属性值
text
获取文本值
location
获取该节点在页面的相对位置
- tag_name
获取标签名称
size
获取节点的大小,也就是宽和高
page_source
获取页面源代码
使用selenium运行js代码
execute_script('js代码')
使用selenium对标签页的操作
- window_handles
- 获取全部标签页,为一个列表
switch_to.window('标签')
跳转到某个标签。
一般这两个方法是同时使用的,先获取到全部标签页,然后通过索引指定跳转到某个标签页
switch_to切换frame标签
iframe是html中常用的一种技术,也就是一个页面中嵌套了另外一个网页,selenium默认是访问不了frame中的内容的
解决方法:
- switch_to.frame(iframe节点元素)
需要注意的是,使用该方法后跳转到frame标签内容后,是无法获取frame标签外的元素的,需要获取当前标签页的句柄,然后切换到该句柄才可以获取frame标签外的元素
selenium对cookie的处理
- get_cookies()
- 获取cookie,返回的是一个列表, 其中包含的就是完整的cookie信息
delete_cookie("需要删除的名字")
删除某一条cookie
delete_all_cookies()
删除全部cookie
设置元素等待
很多页面都使用 ajax 技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性。webdriver 中的等待分为 显式等待 和 隐式等待。
- 隐式等待
- implicitly_wait('int')
默认时间为0 如果selenium没有在DOM中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常,并且隐式等待是全局性的,即运行过程中,如果元素可以定位到,它不会影响代码运行,但如果定位不到,则它会以轮询的方式不断地访问元素直到元素被找到,若超过指定时间,则抛出异常。
- 显式等待
- WebDriverWait(driver, timeout)
driver:浏览器驱动timeout:超时时间,单位秒
设置一个超时时间,每个一段时间就去检测一次该元素是否存在,如果存在则执行后续内容,如果超过最大时间(超时时间)则抛出超时异常
引入WebDriverWait对象,指定最长等待时间,然后调用它的until方法,传入要等待的条件expected_conditions,如:
driver = webdriver.Chrome()
driver.get("https://www.taobao.com/")
wait = WebDriverWait(driver, 10)
input1 = wait.until(EC.presence_of_element_located((By.ID, "q")))使用selenium前进或后退
- back()
后退
- forward()
前进
selenium相关设置
# 实例化配置对象
options = webdriver.ChromeOptions() # 创建一个配置对象
options.add_argument('--headless') # 开启无界面模式
options.add_argument("--disable-gpu") # 禁用gpu
options.add_argument("--proxy-server=http://202.20.16.82:9527") # 使用代理ip
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36")# 设置useragent
# 添加配置对象
driver = webdriver.Chrome(chrome_options=options)使用selenium关闭浏览器
- close()
- 关闭当前标签页
- quit()
- 关闭浏览器
有关selenium更多详细操作看下面链接
边栏推荐
- Go: use gorm query record
- The terminal connection tools, rolling Xshell
- STL源码剖析:class template explicit specialization代码测试和理解
- sql concat()函数
- 预测人们对你的第一印象,“AI颜狗”的诞生
- 使用navicat连接mysql数据库时常报的错误:2003、1698、1251
- MySQL题外篇【ORM思想解析】
- 阿里二面:Sentinel vs Hystrix 对比,如何选择?
- Detailed explanation of numpy multidimensional array ndarray
- AI可通过X光片识别种族,但没人知道为什么
猜你喜欢

Is it possible to use the same port for UDP and TCP?

Ali two sides: List several tips for Api interface optimization

C#的访问修饰符,声明修饰符,关键字有哪些?扫盲篇

专访蚂蚁:这群技术排头兵,如何做好底层开发这件事?| 卓越技术团队访谈录

export , export default, import complete usage

AI can identify race from X-rays, but no one knows why

Ali two sides: Sentinel vs Hystrix comparison, how to choose?

How does Redis prevent oversold and inventory deduction operations?

“AI教练”请进家,家庭智能健身蓬勃发展

Go combines Gin to export Mysql data to Excel table
随机推荐
云服务器零基础部署网站(保姆级教程)
Redis 如何实现防止超卖和库存扣减操作?
go : go-redis set operations
Huawei released "ten inventions", including computing, intelligent driving and other new fields
“AI教练”请进家,家庭智能健身蓬勃发展
Graphical relational database design ideas, this is too vivid
The Society of Mind - Marvin Minsky
《心智社会》—马文·明斯基
深度学习:线性回归模型
node.js中实现对数据库的链式操作
STL源码剖析:class template explicit specialization代码测试和理解
Camera coordinate system, world coordinate system, pixel coordinate system conversion, and Fov conversion of OPENGLDEFocal Length and Opengl
ETL为什么经常变成ELT甚至LET?
从追赶到超越,国产软件大显身手
上传文件--文件类型大全,图片类型,文档类型,视频类型,压缩包类型
LVM and disk quotas
The first artificial intelligence safety competition officially launched
idea built-in translation plugin
一段神奇的没有主方法的代码
ArrayList
https://blog.csdn.net/qq_43965708/article/details/120658713?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165905672916781818722727%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165905672916781818722727&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-120658713-null-null.142^v35^experiment_28w_v1&utm_term=selenium&spm=1018.2226.3001.4187