关于selenium的个人笔记

文章目录

一.定位

1.xpath定位

如果一个属性不能唯一区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素

<input id="kw" class="su" name="ie">
<input id="kw" class="aa" name="ie">
<input id="bb" class="su" name="ie">

这里如果使用id来定位,则第一行与第二行元素重名;如果使用class,则第一行与第三行元素重名。这时可以用“and”连接更多的属性来唯一地标识一个元素

find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")

2.css定位中的组合定位

find_element_by_css_selector("form.fm>span>input.s_ipt")
find_element_by_css_selector("form#form>span>input#kw")
find_element_by_css_selector("form[class='fm']>span>input[class='s_ipt']")
find_element_by_css_selector("form[id='form']>span>input[id='kw']")

二.鼠标事件

关于鼠标的操作方法封装在ActionChains类提供
ActionChains类提供了鼠标操作的常用方法:

perform():执行所有ActionChains中的存储行为
context_click():右击
double_click():双击
drag_and_drop():拖动
move_to_element():鼠标悬停

1.鼠标右击操作

from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
right_click = driver.find_element_by_css_selector("form[id='form']>span[class='bg s_btn_wr']>input[id='su']")
sleep(3)
ActionChains(driver).context_click(right_click).perform()
sleep(3)
driver.quit()

2.鼠标悬停操作

from time import sleep

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
ele = driver.find_element_by_css_selector("div[class='s-top-right s-isindex-wrap']>span[id='s-usersetting-top']")
ActionChains(driver).move_to_element(ele).perform()
sleep(3)
xt_ele = WebDriverWait(driver, 5).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "高级搜索")))
xt_ele.click()
sleep(3)
driver.quit()

3.鼠标双击操作

from time import sleep

from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
ele = driver.find_element_by_link_text("新闻")
ActionChains(driver).double_click(ele).perform()
sleep(3)
driver.quit()

4.鼠标拖放操作

# 定位元素的原位置
element = driver.find_element_by_id("XX")
# 定位元素要移动到的目标位置
target = driver.find_element_by_id("XX")
# 执行元素的拖放操作
ActionChains(driver).drag_and_drop(element, target).perform()

三.键盘事件

# 首先引入keys模块
from selenium.webdriver.common.keys import keys

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("selenium")
# 删除多输入的一个m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
# 输入空格键 + "教程"
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")
# Ctrl+A 全选输入框的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
# Ctrl+X 剪切输入框的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
# Ctrl+V 粘贴输入框的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)

driver.quit()

send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F12) 键盘F12

四.定位一组元素

# 通过 XPATH 找到type=checkbox的元素
checkboxs = driver.find_element_by_xpath("//input[@type='checkbox']")
# 通过 CSS 找到type=checkbox的元素
checkboxs = driver.find_element_by_css_selector("input[type=checkbox]")
for checkbox in checkboxs:
	checkbox.click()
		time.sleep(1)
# 打印当前页面上type为 checkbox 的个数
print(len(checkboxs))
# 把页面中最后一个CheckBox的勾去掉
driver.find_element_by_css_selector("input[type=checkbox]").pop().click()

pop()方法用于获取列表中的一个元素,默认为最后一个元素,并返回该元素的值。如果只想勾选一组元素中的某一个呢?

pop() 或 pop(-1) #默认获取一组元素中的最后一个
pop(0) #默认获取一组元素中的第一个
pop(1) #默认获取一组元素中的第二个

五.上传文件

准备一个upfile.html
关于selenium的个人笔记

<html>
	<head>
		<title>upload_file</title>
	</head>
	<body>
		<div class="row-fluid">
			<div class="span6 well">
				<h3>upload_file</h3>
				<input type="file" name="file"/>
			</div>
		</div>
	</body>
</html>

编写Python文件访问HTML地址,并通过send_keys上传文件

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
file_path = "C:/Users/winuser/Desktop/upfile.html"
driver.get(file_path)

# 定位上传按钮,添加本地文件
driver.find_element_by_css_selector("input[type='file']").send_keys("E://upfile.txt")   
//send_keys括号中引用的文件就是需要上传的文件的地址,这个upfile.txt中的内容可以为空,毕竟只是看下上传效果
sleep(3)
driver.quit()

上传之后的效果图如下:
关于selenium的个人笔记

六.下载文件

指定目录进行文件的自动化下载

from time import sleep
from selenium import webdriver

option = webdriver.ChromeOptions()
# default_content_settings.popups设置为0表示禁止弹出窗口
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'E:\\'}
# add_experimental_option指添加实验性质的设置参数
option.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=option)

driver.get("http://pypi.python.org/pypi/selenium")
driver.maximize_window()
sleep(3)
driver.find_element_by_id("files-tab").click()
sleep(5)
driver.find_element_by_link_text("selenium-3.141.0-py2.py3-none-any.whl").click()
sleep(10)
driver.quit()

七. 操作cookie

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.youdao.com")
driver.maximize_window()
# 获得cookie信息
cookie = driver.get_cookies()
# 打印cookie信息
print(cookie)
driver.quit()

执行结果:
关于selenium的个人笔记

知道了cookie的存放形式之后,我们可以以这种形式向浏览器写入cookie信息

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.youdao.com")
# 添加cookie信息
driver.add_cookie({'name': 'key-1', 'value': 'value-2'})
for cookie in driver.get_cookies():
    print("%s--%s" % (cookie['name'], cookie['value']))

driver.quit()

执行结果:
关于selenium的个人笔记

八.调用JavaScript

调用JavaScript调节浏览器轮动条的位置

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://baidu.com")
# 设置浏览器窗口的大小
driver.maximize_window()
# driver.set_window_size(1200, 1200)
# 搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(3)

# 通过JavaScript设置浏览器滚动条的位置
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(3)
driver.quit()

运行结果:
关于selenium的个人笔记

九.验证码的处理

from random import randint

# 生成一个 10000 到 99999 的随机整数
verify = randint(10000, 99999)
print(u"生成的随机数:%d" %verify)
number = input("请输入随机数:")
print(number)
number = int(number)

if number == verify:
    print("登录成功!")
elif number == 12345:
    print("登录成功!")
else:
    print("登录失败,验证码输入有误...")

执行结果:
关于selenium的个人笔记

关于selenium的个人笔记
关于selenium的个人笔记

上一篇:3D打印技术在医疗上的实际应用与实验室研究


下一篇:Objective-O Runtime 运行时初体验