Python Selenium入门学习材料整理

Python Selenium入门学习材料整理
一、简介及环境搭建
1、selenium 介绍:selenium 是一个 web 的自动化测试工具,可以自动打开浏览器执行页面打开、页面内容抓取、页面元素搜索,是相对好上手的网页爬取工具。
2、安装selenium:pip install selenium
3、安装webdriver:selenium打开网页需要有webdriver来调用浏览器。
Firefox:https://github.com/mozilla/geckodriver/releases/
Chrome:https://sites.google.com/a/chromium.org/chromedriver/ 或者
http://chromedriver.storage.googleapis.com/index.html
IE:http://selenium-release.storage.googleapis.com/index.html
注意事项:
1)本机必须安装相应浏览器
2)webdriver一定和对应的浏览器版本,以及与selenium版本对应
3)下载webdriver到Python安装目录下
二、基本使用方法
1、启动浏览器,打开页面(我安装的firefox驱动,以下均以firefox为例)
from selenium import webdriver
browser = webdriver.Firefox()
browser.get(‘https://www.baidu.com/‘)
2、元素定位
webdriver常用定位方法如下:
id定位:find_element_by_id()
name定位:find_element_by_name()
class定位:find_element_by_class_name()
link定位:find_element_by_link_text()
partial link定位:find_element_by_partial_link_text()
tag定位:find_element_by_tag_name()
xpath定位:find_element_by_xpath()
css定位:find_element_by_css_selector()
引用一个网上的例子:
#coding=utf-8
from selenium import webdriver
browser=webdriver.Firefox()
browser.get("https://www.baidu.com")
#########百度输入框的定位方式##########
#通过id方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过class name方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过xpath方式定位
browser.find_element_by_xpath("//input[@id=‘kw‘]").send_keys("selenium")
#定位提交按键点击
browser.find_element_by_id("su").click()
#等待3秒
time.sleep(3)
browser.quit()
经验说明:
1)以上定位方法id、name类的最直接,可直接定位到元素,但要保证页面上没有重复的,如不唯一要用elements取出一系列值后,根据索引号定位。
2)页面元素情况要先分析网页内容,如是动态网页,可以在要定位的内容上点右键用“查看无素”来查看动态页面内容。
3)xpath很强大,建议好好学学
三、操作动作
1、浏览器操作
浏览器最大化:browser.maximize_window()
浏览器最小化:browser.minimize_window()
设置浏览器宽480、高800:browser.set_window_size(480, 800)
浏览器前进:browser.forword()
浏览器后退:browser.back()
2、操作定位的对象
click()——点击对象
send_keys("输入的内容")——在对象上模拟按键输入,又如输入回车:send_keys(Keys.ENTER),ctrl+a:send_keys(Keys.CONTROL,‘a‘)
clear()——清除对象的内容
submit()——提交对象的内容
text——获取元素的文本信息
注:不一定所有定位的对象都能如上操作,要根据对象的特性选择
3、定位对象的属性值的获取:get_attribute
d=browser.find_element_by_xpath("//input[@id=‘kw‘]")
d.get_attribute("onclick")
即可取出input的onclick属性的值。
四、几个常见问题的处理方法
1、class含有空格时解决方法:
在实际进行元素定位时,class name常常是有多个class组合的复合名称,中间以空格隔开。如果直接用by_class进行定位会出现报错。
解决办法:
1)class属性唯一但是有空格,选择空格两边唯一的那一个
2)若空格隔开的class不唯一可以通过索引进行定位,例:self.driver.find_elements_by_class_name(‘table-dragColumn‘)[0].click()
3)通过css方法进行定位(空格以‘.’代替),例:
2、图形验证码问题:
网上查了很多,基本上都说用tesseract,经过实测,字母正排加线条点处理后还凑合能识别,要字母变型或旋转后基本识别不了。所以遇到这样的页面,还是用人工识别录入吧。
可以通过input把程序暂停住,人工处理完再继续。
例如:
code=input("请输入图形码内容:")
driver.find_element_by_id("checkCode").send_keys(code)
3、自动向下滚屏:
js="var q=document.documentElement.scrollTop=100000"
driver.execute_script(js)
注:有些动态页面下翻功能也不好用,一直没找到好的解决办法,只能用input暂停程序,手工翻到底,让动态页面完全加载。
4、多层框架/层级定位
如果页面存在iframe或有内嵌窗口,直接定位会出现定位不到的错误,解决方法如下:
iframe:
#先找到到 ifrome1(如果id = f1)
browser.switch_to_frame("f1")
内嵌窗口:
browser.switch_to_window("f1")
5、组合查找:
例如:driver.find_element_by_id(‘n1‘).find_element_by_tag_name(‘div‘).text
6、select 元素(下拉选项卡)的选择,可以用Select方法
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name(‘selectname‘))
select.select_by_index(optionindex)
select.select_by_visible_text("optiontext")
select.select_by_value("optionvalue")
全部取消选择:select.deselect_all()
获取已选择列表:selectedoptions = select.all_selected_options
获取所有可选选项:options = select.options
7、Cookies处理
1)为页面添加 Cookies,用法如下
driver.get("http://www.123.com")
cookie = {‘name‘ : ‘user‘, ‘value‘ : ‘tom‘}
driver.add_cookie(cookie)
2)获取页面 Cookies,用法如下
driver.get("http://www.123.com")
driver.get_cookies()
7、xpath定位速查表
直接子元素 //div/a
子元素或后代元素 //div//a
以id定位 //div[@id=‘idValue‘]//a
以class定位 //div[@class=‘classValue‘]//a
同级弟弟元素 //ul/li[@class=‘first‘]/following
属性 //form/input[@name=‘username‘]
多个属性 //input[@name=‘continue‘ and
第4个子元素 //ul[@id=‘list‘]/li[4]
第1个子元素 //ul[@id=‘list‘]/li[1]
最后1个子元素 //ul[@id=‘list‘]/li[last()]
属性包含某字段 //div[contains(@title,‘Title‘)]
属性以某字段开头 //input[starts-with(@name,‘user‘)]
属性以某字段结尾 //input[ends-with(@name,‘name‘)]
text中包含某字段 //div[contains(text(), ‘text‘)]
元素有某属性 //div[@title]
父节点 //div/..
同级兄弟节点 //li/preceding-sibling::div[1]
8、xpath定位几个实例:
1)//td[@title=‘admin‘]/parent::tr # parent::tr表示定位节点的父节点,必须写明父组节点tr
或//td[@title=‘admin‘]/.. # ..在此处相当于parent::tr,此种方法简捷很多
2)following结合/、//的区别
following: 选取文档中当前节点的结束标签之后的节点。
//td[@title=‘admin‘]/following::label 表示选取td结束标签之后的label节点,不包括<td>至</td>中所有label子节点。即‘/‘ 表示从该节点后进行定位;
//td[@title=‘admin‘]//following::label 表示选取td结束标签之后的节点, 包括它自己的子节点。即‘//‘ 表示可以从td的任意一级子节点中进行定位,以及对td节点后进行定位。这时候可能会出现定位出多个节点,因为子节点中只要有label都是定位范围。
那如只想定位到第一个label节点,那就要用descendant::label才能准确定位到。
3)一个从后向前找的实例:
网页源码:
<div class="form-group">
<div class="label-cont label-ab">
<label for="">行业:</label>
</div>
<div class="form-cont content-ab">
<div class="multi-line-div" id="industry">工业</div>
</div>
</div>
目标:要定位到上面的label。
方法://div[@id="industry"]/parent::div/parent::div/descendant::label #向上找到爷爷辈,再到爷爷辈的子节点中查找label。
也可以写成://div[@id="industry"]/../../descendant::label
还可以写成://div[@id="industry"]/../../div/label
9、Xpath 的常见函数
last() 最后一个节点数
.//*[@id=‘select2-drop‘]/ul/li[last()]

参考资料:
1、Python+Selenium基础入门及实践(https://www.jianshu.com/p/1531e12f8852)
2、Python爬虫利器五之Selenium的用法(https://cuiqingcai.com/2599.html)

原文地址:https://www.cnblogs.com/tywusy/p/12134385.html

时间: 2024-10-01 07:54:53

Python Selenium入门学习材料整理的相关文章

Python编程入门学习:最常见加密方式和Python实现

前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错. 将字符串和Bytes互相转换可以使用encode()和decode()方法.如下所示: # 方法中不传参数则是以默认的utf-8编码进行转换In [1]: '南北'.encode()Out[1]: b'\xe5\x8d\x97\xe5\x8c\x97'In [2]: b'\xe5\x8d\x97\xe

【python】入门学习(十)

#入门学习系列的内容均是在学习<Python编程入门(第3版)>时的学习笔记 统计一个文本文档的信息,并输出出现频率最高的10个单词 #text.py #保留的字符 keep = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p' 'q','r','s','t','u','v','w','x','y','z',' ','-',"'"} #将文本规范化 def normalize(s): "

Python自学入门学习基础之一: 列表和元组

本人从事Python多年,有好多小伙伴加了我之后说:有没有相对来说简单点的教程,你写的一些大项目我们小编看不懂!!今天我就发一篇小白入门学习之一的基础,列表和元祖,欢迎大家订阅公众号:Python从程序猿到程序猿,或者加 ,山君:49130.8659,编码:柯西 ...编码:柯西,,我会分享爬虫或者web从0基础到项目实战的一系列的视频资料,保证可以让你自学成才. 列表 首先,列表属于序列,那么序列类型可用如下内建函数-- list(iter):把可迭代对象转换为列表. str(obj):把ob

Python一些入门学习

最近在尝试用Pyhton写c4d插件,虽然说也有C++的api,不过py生产力明显更高一些 Python语法入门 1.hellow world: 2.变量创建,变量在字符串中的连接方式是逗号,而不是加号 3.for循环 4.while循环,似乎没有i++这种语法,只能i=i+1 注:无限while循环用"while 1".另外python里没有switch语句

python数据分析入门学习笔记儿

学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分析相关python库的介绍(前言1~4摘抄自<利用python进行数据分析>) 1.Numpy: Numpy是python科学计算的基础包,它提供以下功能(不限于此): (1)快速高效的多维数组对象naarray (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数 (3)用于读写硬盘

selenium入门学习

---恢复内容开始--- 在写爬虫的学习过程中,经常会有一些动态加载,有些是可以动过接口直接获取到,但是实在没办法,所以学习下selenium. 首先百度一下: Selenium [1]  是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等.这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序

【Python】入门学习六 列表及其相关操作

我们在生活中常常会列出自己的List,比如购物清单,待办事项等.编程来源于生活,在Python,列表也是Python中常见的数据类型之一.下面讲述列表的相关操作. 1.创建列表 列表可以包含Python能存储的任何类型的数据,包括数字.字符串.变量.甚至其他列表.列表中的元素可以是不同类型. ①列表名 = [ ] 创建一个空列表,随后再更新列表里的元素值. ②也可以在创建列表的同时赋值.列表名 = [元素1, 元素2, ... ]. 2.访问列表中的元素及列表“分片”操作 列表中的元素都有自己的

【Python】入门学习六 字典及其相关操作

字典由一系列键-值对组成,每个键都与一个值相关联,通过键我们可以访问其对应的值.这些值可以是Python中的任意对象类型,键必须是不可变类型,包括数字.字符串.元组,但不能使用列表. 1.创建字典 字典用放在花括号{}中的一系列键值对表示,键和值之间用冒号隔开,每个元素之间用逗号隔开 dic_0 = {'name' : 'zhangsan', 'age' : '22'} 2.访问字典 字典名['要访问的键名'],例如上例中 student_name = dic_0['name'] 3.添加字典内

在Centos7下安装Python+Selenium+Firefox学习环境

Selenium 一自动化测试工具.它支持 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试. 所以呢,你要用Selenium你必须得先有个浏览器(大多数人没说这点,略坑!),无论是Chrome也好,Firefox也好,你必须得有一个. 安装完浏览器了,抱着愉快的心情用pip3安装了Selenium,在Pyhton交互模式中直接导入Webdriver,创建Webdriver对象报如下错误