通过Python实现web端自动化_教程

前言

Python+Selenium 来实现的web端自动化
操作浏览器通过selenium来操作
selenium不单单只支持Python(JAVA,RUBY等等)

python3安装

教程查看另一篇文章链接: 查看.

selenium的环境搭建

进入dos界面:
先验证是否已经安装了pip,dos界面输入“pip”查看,出现以下画面代表已经安装,(如未安装,请自行下载安装)
在这里插入图片描述
然后安装selenium

pip install selenium

浏览器驱动

selenium操作不同的浏览器,需要下载不同浏览器的驱动
以chrome浏览器为例:
1、进入到下载页面,找到符合自己浏览器版本的驱动
2、下载好了之后,右键解压到当前文件夹
在这里插入图片描述
3、将得到的chromedriver.exe放到Python的安装目录

Firefox 浏览器驱动: 浏览器驱动
Chrome 浏览器驱动:备用地址
IE 浏览器驱动:IEDriverServer
Edge 浏览器驱动:MicrosoftWebDriver

from selenium import webdriver
driver = webdriver.Chrome() # Chrome 浏览器
#driver = webdriver.Firefox() # Firefox 浏览器
#driver = webdriver.Ie() # Internet Explorer 浏览器
#driver = webdriver.Edge() # Edge 浏览器
#通过get()方法打开网页
d.get('http://*')

定位方式

id            --->  find_element_by_id()     
name          --->  find_element_by_name()     
class         --->  find_element_by_class_name()       
tag_name      --->  find_element_by_tag_name()            
文本链接       --->  find_element_by_link_text()
部分文本链接   --->  find_element_by_partial_link_text()xpath
xpath         --->  find_element_by_xpath()
css_selector  --->  find_element_by_css_selector()         

send_keys()输入
clear()清空输入内容
click()单击操作

# 使用selenium 之前,需要先导入
from selenium import webdriver
from time import sleep
# 初始化一个chrome浏览器
d = webdriver.Chrome()
# 通过get方法打开网址
d.get("http://*")
sleep(2)
# 通过id定位 user_login
# 通过 send_keys('XXX')输入内容
d.find_element_by_id('user_login').send_keys('随便输入')
sleep(2)
# 通过name定位 log
# 通过 clear()方法 清除输入的内容
d.find_element_by_name('log').clear()
sleep(2)
# 通过class_name定位 input
d.find_element_by_class_name('input').send_keys('ad')
sleep(2)
# 通过tag_name定位 input
d.find_element_by_tag_name('input').send_keys('min')
d.find_element_by_css_selector('#wp-submit').click()

close()关闭当前窗口
quit()关闭所有浏览器并退出驱动
text 获取元素文本属性

from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://*')
#通过xpath定位到用户名
d.find_element_by_xpath('//label[@for="user_login"]/input').send_keys('admin')
sleep(1)
#通过css定位到用户名
d.find_element_by_css_selector('#user_pass.input').send_keys('admin123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
# text 获取元素的文本信息
login_msg = d.find_element_by_css_selector('.display-name').text
print(login_msg)
d.close()#关闭浏览器
d.quit()#关闭浏览器并且关闭驱动

最大化窗口maximize_window()
隐式等待implicitly_wait(10)
判断元素是否可见is_displayed()

from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
# 最大化窗口
d.maximize_window()
# 隐式等待,设置最大的等待时长,只对查找元素(find_elementXXX)生效
d.implicitly_wait(10)
d.get('http://*')
d.find_element_by_css_selector('#user_login').send_keys('admin')
# 判断元素是否可见 is_displayed()
password_result = d.find_element_by_css_selector('#user_pass').is_displayed()
print('可见的元素:'+str(password_result))
other_result =
d.find_element_by_css_selector('[name="redirect_to"]').is_displayed()
print('不可见的元素:'+str(other_result))
# 在html中 type="hidden" 属性 是不可见的

submit() 用于提交表单

点击登录按钮,一般情况下,使用click()进行点击
有些时候也可以使用submit()代替click(),相当于敲回车
#d.find_element_by_css_selector('#wp-submit').click()
d.find_element_by_css_selector('#wp-submit').submit()
sleep(1)

get_attribute(“属性”) 获得属性值

 获取属性的值,根据属性名称获取对应的值
# get_attribute('属性名称')
att = d.find_element_by_css_selector('#user_login').get_attribute('size')
print(att)

鼠标悬停
需要导入:
from selenium.webdriver import ActionChains

mte = d.find_element_by_css_selector('#menu-posts .wp-menu-name')# 需要悬停的元素
#ActionChains(浏览器).move_to_element(悬停的元素).perform()
# perform()执行操作
ActionChains(d).move_to_element(mte).perform()

表单切换
switch_to.frame(需要切换到的表单)
switch_to.default_content()切换到最外层表单

#切换表单 switch_to.frame()
# 先定位到需要切换的表单
frames = d.find_element_by_css_selector('#content_ifr')
d.switch_to.frame(frames)
d.find_element_by_css_selector('#tinymce').send_keys('这是正文')
sleep(3)
# 切换到最外层表单
d.switch_to.default_content()
d.find_element_by_css_selector('#publish').click()

像表单的切换/鼠标的悬停 为提高成功率,最好是在操作后sleep(1)秒
切换窗口 switch_to.window(需要切换到的窗口)
获取所有窗口,以列表的形式返回过来 d.window_handles

from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
# 最大化窗口
d.maximize_window()
# 隐式等待,设置最大的等待时长,只对查找元素(find_elementXXX)生效
d.implicitly_wait(10)
d.get('https://*')
d.find_element_by_css_selector('#q').send_keys("appium环境搭建")
d.find_element_by_css_selector('.ic-search').click()
sleep(3)
# 获取所有窗口,以列表的形式返回过来
all_windows = d.window_handles
print(all_windows)
#切换窗口,根据所有窗口的下标来切换
d.switch_to.window(all_windows[1])
sleep(3)
d.find_element_by_css_selector('#q').clear()

关于select标签的下拉框如何进行选择
首先需要先导入一个包(注意Select的S需要大写)
from selenium.webdriver.support.ui import Select

# 使用Select方法进行选择
# 先导入Select 类from selenium.webdriver.support.ui import Select
# 需要先定位到下拉框
elements = d.find_element_by_css_selector('#role')
#Select(需要操作下拉框).根据什么操作
Select(elements).select_by_index(2)# 根据index,下标定位,从0开始
sleep(3)
Select(elements).select_by_value('administrator')#根据value定位
sleep(3)
Select(elements).select_by_visible_text('投稿者')#根据文本定位

警告框的处理
switch_to.alert

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
d = webdriver.Chrome()
# 最大化窗口
d.maximize_window()
# 隐式等待,设置最大的等待时长,只对查找元素(find_elementXXX)生效
d.implicitly_wait(10)
d.get('https:/*')
mte = d.find_element_by_link_text('设置')
ActionChains(d).move_to_element(mte).perform()
sleep(1)
d.find_element_by_css_selector('.setpref').click()
sleep(1)
d.find_element_by_css_selector('.prefpanelgo').click()
# 获取警告框的文本信息
alert_msg = d.switch_to.alert.text
print(alert_msg)
# 接受警告框 accept()
d.switch_to.alert.accept()
# 取消警告框 dismiss()
d.switch_to.alert.dismiss()

js代码

from selenium import webdriver
from time import sleep
d = webdriver.Chrome()
d.get('http://*')
#window.scrollTo(A,B);# 控制浏览器的滚动条
#window.scrollTo(A,B);# 控制浏览器的滚动条 A 表示与左边框的距离 B表示与上边框的距离
# js_code1 = "window.scrollTo(0,600);"
# js_code2 = "window.scrollTo(0,1200);"
#document.querySelector('css的定位').removeAttribute('移除的属性名');
js_code1 =
'''document.querySelector('[name="testcookie"]').removeAttribute('type');'''
d.execute_script(js_code1)
sleep(5)

定位一组元素find_elements_by_XXX
以列表的形式返回

# 定位一组元素
goodlist = d.find_elements_by_css_selector('.goods_title')
choice(goodlist).click()

发布了23 篇原创文章 · 获赞 32 · 访问量 5039

猜你喜欢

转载自blog.csdn.net/qq_45664055/article/details/102499984