python+selenium,web页面自动化

文章介绍了一个使用Python3、selenium和openpyxl编写的Web自动化脚本,通过Excel配置浏览器类型、元素定位及操作。脚本包括获取浏览器驱动、打开网址、元素定位和操作、以及关闭浏览器等功能,支持多种定位方法和操作,如id、xpath、css选择器等。
摘要由CSDN通过智能技术生成

一、简单便写了个web自动化脚本,使用了selenium、openpyxl,整体框架还有许多随意的地方,大家见谅(使用python3.0以上)

二、我的思路
1、我想的是通过excel,得到浏览器类型、使用何种元素定位方法、定位的元素元素值、针对该元素需要做什么操作(一般都是点击/输入)等,如图
在这里插入图片描述
2、既然使用excel作为数据来源,那么我就用了我之前写的openpyxl处理excel的代码(以前发布的文章)
3、封装driver、find_element等,还做了个config放置网站地址、chrome驱动地址、excel文件地址等
4、调用使用

三、具体代码,按思路顺序来展示
第一点见上图,不讲了

第二点代码去我之前的文章找,不讲了,直接复制全部代码过来就行(dat_excel_01.py)

第三点代码如下(tool_class.py)

from configs import config
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service


class WpDriver:
    element_operation = ''
    send_value = ''
    # 这里就是为了获得浏览器驱动driver,兼顾其他浏览器,比如chrome、火狐、IE等
    def get_drivers(self, driver_type):
        if driver_type == 'Chrome':
            s = Service(config.chrome_path)
            driver = webdriver.Chrome(service=s)
            return driver
            
	# 这里封装了个打开网站的方法,并放大浏览器
    def open_url(self, driver, url):
        driver.get(url)
        sleep(5)
        driver.maximize_window()
        sleep(3)

	# 这里封装的就是find_element,主要是定位元素使用什么方法,是使用id、xpath、css等,然后每个方法都给他加了个操作判断
	#(入参依次是driver、元素定位方法(id、xpath、css)、元素的值(id值、xpath值等)、针对该元素的操作(click、send_keys)、send_keys的时候需要输入的值)
    def find_element(self, driver, element_type, element_value, element_operation=element_operation,
                     send_value=send_value):
          # 这里是有的地方需要纯元素,比如进入iframe、滑动到指定元素等,直接返回元素对象
        if element_type == 'id' and element_operation == '':
            return driver.find_element(By.ID, element_value)
            # 这里是使用id定位元素,并进行点击操作
        if element_type == 'id' and element_operation == 'click':
            driver.find_element(By.ID, element_value).click()
             # 这里是使用id定位元素,并进行输入操作
        if element_type == 'id' and element_operation == 'send_keys':
            driver.find_element(By.ID, element_value).send_keys(send_value)
        if element_type == 'xpath' and element_operation == '':
            return driver.find_element(By.XPATH, element_value)
        if element_type == 'xpath' and element_operation == 'click':
            driver.find_element(By.XPATH, element_value).click()
        if element_type == 'xpath' and element_operation == 'send_keys':
            driver.find_element(By.XPATH, element_value).send_keys(send_value)
        if element_type == 'css' and element_operation == '':
            return driver.find_element(By.CSS_SELECTOR, element_value)
        if element_type == 'css' and element_operation == 'click':
            driver.find_element(By.CSS_SELECTOR, element_value).click()
        if element_type == 'css' and element_operation == 'send_keys':
            driver.find_element(By.CSS_SELECTOR, element_value).send_keys(send_value)
  
  # 这里封装了个浏览器关闭
    def close_web(self, driver):
        driver.close()
        
	 # 由于我这边使用的系统有图形码,所以做了半自动的登录,手动去输入图形码
    def login(self, driver):
        # 输入登录手机号
        driver.find_element(By.CSS_SELECTOR, "div[class='el-input']>input").send_keys("13600000000")

config代码(configs->config)

import os


open_system_url = "填系统地址"
path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
# abspath用来将“/”变成“\”
# dirname用来获取当前位置名称
chrome_path = os.path.join(path, 'driver_type\\chromedriver.exe')
# print(chrome_path)
excel_data_path = os.path.join(path, 'excel_data\\test_excel.xlsx')

第四点代码如下,这里在实践的时候发现问题了,所以都写这了,看起来有点乱(test_main.py):

from tool_class import WpDriver
from configs import config
from time import sleep
import dat_excel_01


def webdata():
    da = dat_excel_01
    b = da.list_excel_data()
    dr = WpDriver()
    web_type = b[0].get('浏览器类型')
    driver1 = dr.get_drivers(web_type)
    sleep(3)
    dr.open_url(driver1, config.open_system_url)
    sleep(3)
    dr.login(driver1)
    sleep(20)
    for ii in range(0, len(b)):
        a = b[ii]
        index_txt = a.get('测试点')
        element_type = a.get('元素定位方法')
        element_value = a.get('元素值')
        element_operation = a.get('对元素的操作')
        send_value = a.get('需要输入的值')
        if send_value is not None:
            pass
        else:
            send_value = ''

        if element_operation is not None:
            pass
        else:
            element_operation = ''

        if index_txt == '切换网页':
            sleep(2)
            a = driver1.window_handles
            driver1.switch_to.window(a[-1])
            sleep(2)
        elif index_txt == '进入内嵌iframe':
            sleep(2)
            fra_a = dr.find_element(driver=driver1, element_type=element_type, element_value=element_value,
                                    element_operation=element_operation, send_value=send_value)
            driver1.switch_to.frame(fra_a)
            sleep(2)
        elif index_txt == '退出iframe':
            driver1.switch_to.default_content()
        elif index_txt == '下滑指定元素点':
            sleep(2)
            al = dr.find_element(driver=driver1, element_type=element_type, element_value=element_value,
                                 element_operation=element_operation, send_value=send_value)
            driver1.execute_script("arguments[0].scrollIntoView();", al)
            sleep(2)
        else:
            dr.find_element(driver=driver1, element_type=element_type, element_value=element_value,
                            element_operation=element_operation, send_value=send_value)
        sleep(2)
    sleep(10)
    dr.close_web(driver1)


if __name__ == '__main__':
    webdata()

四、整体如图,没办法,不能传压缩文件
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值