分享Selenium测试工具用来模拟用户浏览器的操作

执行JS的类库:execjs,PyV8,selenium,node

pip list

c6a7a6b08a9f42f59435f2a41dfb9ab5.png

pip install selenium

2420b497f48b44d3b0af2310d399e805.png

pip install xlrd

3524f152d1a545ca8390a8541c409947.png

pip install xlwt

166d8ef184e4466ebf3635805f940570.png

pip install PyExecJS

388270bbce66455d8ec049205ad4e9f9.png

pip install xlutils

9d54006a2af8474cae64938faef17776.png

252d3a76866241c293e41ede8da8fb8b.png

selenium测试工具可以用来模拟用户浏览器的操作,其支持的浏览器有:PhantomJS,Firefox,Chrome等等,开发者可以根据当前的系统形式选择不同的模拟浏览器。
每种模拟浏览器都需要对应的浏览器驱动(一个以.exe为后缀的可执行文件),使用谷歌浏览器Chrome,对应的浏览器驱动可以通过下面的网址下载。要完整地安装Python-Selenium库,让Chrome浏览器实现自动化,需要完成下面4步:Chromedriver安装、Selenium库安装、测试、关闭Chrome浏览器自动更新。

ChromeDriver - WebDriver for Chrome - Downloads

如果您使用的是Chrome 115或更新版本,请参阅Chrome测试可用性仪表板。此页面为特定的ChromeDriver版本提供下载。

624ad2710afc4e209917ff56e0ecd689.png

a42042c6bc6c4f599d475ef2397ad324.png

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 24 16:10:55 2024@author: Administrator
"""from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import random
import time
from selenium.webdriver.chrome.options import Optionsimport threading
from datetime import datetime
from queue import Queueclass ShellChrome(object):def __init__(self,count):self.count = countself.que = Queue(maxsize = count)ua = self.getheaders()#mobile_emulation = {"deviceName": "Nexus 7"}self.options = webdriver.ChromeOptions()# 把Chrome设置成可视化无界面模式,windows/Linux 皆可self.options.add_argument('headless')# 转换手机模式#self.options.add_experimental_option("mobileEmulation", mobile_emulation) # 全屏启动,无地址栏self.options.add_argument('kiosk')# 设置默认编码为 utf-8,也就是中文self.options.add_argument('lang=zh_CN.UTF-8')# 禁用图片加载 提升速度self.options.add_argument('blink-settings=imagesEnabled=false')# 隐身模式self.options.add_argument('incognito')# 自动打开开发者工具self.options.add_argument("auto-open-devtools-for-tabs")# 启动时,不激活(前置)窗口#self.options.add_argument('no-startup-window') # 设置窗口启动位置(左上角坐标)self.options.add_argument('window-position=100,100')# 禁用gpu渲染 规避bugself.options.add_argument('disable-gpu')# 以最高权限运行self.options.add_argument('--no-sandbox')# 禁用JavaScriptself.options.add_argument("--disable-javascript")# 设置开发者模式启动,该模式下webdriver属性为正常值self.options.add_experimental_option('excludeSwitches', ['enable-automation']) # 禁用浏览器弹窗prefs = {'profile.default_content_setting_values' :  {'notifications' : 2}}self.options.add_experimental_option('prefs',prefs)# 添加uaself.options.add_argument('user-agent=' + ua)self.service = Service('D:\chromedriver.exe')self.options.binary_location = "C:/Program Files/Google/Chrome/Application/chrome.exe"# 特别注意,windows下要带.exeself.driver = webdriver.Chrome(options=self.options,service=self.service)# self.driver.maximize_window()# 根据桌面分辨率来定,主要是为了抓到验证码的截屏self.driver.set_window_size(960, 800)self.elements = []def threadFunc(self):#print("正在打开页面...")try:self.product()self.consume()except Exception as e:#打印异常堆栈信息print(e)#print("正在关闭页面...")self.driver.quit()def product(self):url = ['https://m.baidu.com/','https://m.baidu.com/','https://m.baidu.com/',]for i in range(self.count):# 让浏览器不要显示当前受自动化测试工具控制的提醒self.driver.get(url[i])#设置隐式等待self.driver.implicitly_wait(10)                 #加载等待最长10秒time.sleep(4)self.que.put(self.driver.title)self.elements = self.driver.find_elements(by=By.CLASS_NAME, value='detail')for k in range(len(self.elements)):self.elements[k].click()time.sleep(1)# print('先进先出队列:{0};是否为空:{1};队列大小:{2};是否满:{3}'.format(self.que.queue,self.que.empty(),self.que.qsize(),self.que.full()))def consume(self):for i in range(self.count):temp = self.que.get()#print(temp)#print(temp.current_url)#print(temp.window_handles)self.que.task_done()def getheaders(self):user_agent_list = ['Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36']UserAgent=random.choice(user_agent_list)return UserAgent
if __name__ == '__main__':startTime = time.perf_counter()print(datetime.now())#time.process_time()#time.default_timer()#time.perf_counter()count = int(input('请输入队列数:'))max = 10000i = 1while i < max:try:threads = []for _ in range(count):  # 循环创建10个线程lianghua = ShellChrome(count)t = threading.Thread(target=lianghua.threadFunc)threads.append(t)t.setDaemon(True)  # 给每个子线程添加守护线程for t in threads:  # 循环启动10个线程t.start()for t in threads:t.join(4)  # 设置子线程超时4秒except Exception as e:#打印异常堆栈信息print(e)i+=1endTime = time.perf_counter()print(int( (endTime-startTime) * 1000) / 1000)print(datetime.now())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505603.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Compiling from source on UNIX(cmake doxygen ant maven ccache)

前言 源码链接 cmake-3.18.0 https://cmake.org/files/v3.18/cmake-3.18.0.tar.gzdoxygen-1.10.0 https://www.doxygen.nl/files/doxygen-1.10.0.src.tar.gzapache-ant-1.10.8-bin https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.8-bin.tar.gzapache-maven-3…

ctf_show笔记篇(web入门---文件包含)

目录 文件包含 78-79&#xff1a;最基础的文件包含&#xff0c;使用伪协议&#xff0c;大小写绕过或者通配符绕过&#xff0c;再或者使用其他方法 ​编辑80-81&#xff1a;可采用日志文件绕过或者大小写绕过&#xff08;81只能日志文件绕过&#xff09; ####80-86&#xff1…

【接口测试】常见HTTP面试题

目录 HTTP GET 和 POST 的区别 GET 和 POST 方法都是安全和幂等的吗 接口幂等实现方式 说说 post 请求的几种参数格式是什么样的&#xff1f; HTTP特性 HTTP&#xff08;1.1&#xff09; 的优点有哪些&#xff1f; HTTP&#xff08;1.1&#xff09; 的缺点有哪些&#x…

电子电器架构 —— OTA测试重要性以及内容

电子电器架构 —— OTA测试重要性以及内容 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

MySQL知识点总结(七)——主从复制、读写分离、高可用

MySQL知识点总结&#xff08;七&#xff09;——主从复制、读写分离、高可用、分库分表 主从复制主从复制原理主从复制配置主节点从节点 主从复制的多种类型一主一从一主多从多主一从双主复制级联复制 主从复制的多种模式异步复制全同步复制半同步复制 主从复制延迟及其解决办法…

FCIS 2023网络安全创新大会:洞察前沿技术,探索安全新境界(附大会核心PPT下载)

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为全球关注的焦点。作为网络安全领域的重要盛会&#xff0c;FCIS 2023网络安全创新大会如期而至&#xff0c;汇聚了全球网络安全领域的顶尖专家、学者、企业家和政策制定者&#xff0c;共同探讨网络安全的…

内存空间担保机制

什么是内存空间担保机制&#xff1f; 内存空间担保机制&#xff08;Memory Space Guarantee&#xff09;是垃圾回收&#xff08;Garbage Collection&#xff09;算法中的一种策略。它用于在进行垃圾回收过程&#xff08;如Minor GC或Full GC&#xff09;时&#xff0c;确保老年…

vcruntime140.dll为什么都是?解决vcruntime140.dll丢失的七种办法

计算机中一个常见的错误提示是“无法继续执行代码&#xff0c;因为找不到vcruntime140.dll”。这个问题的出现可能是由于vcruntime140.dll文件丢失或损坏导致的。本文将介绍解决这个问题的7个方法&#xff0c;并详细解释vcruntime140.dll丢失的原因以及其属性介绍。 一、vcrun…

Docker-基础

Docker ⛅虚拟化&容器化&#x1f320;为什么要虚拟化&容器化 ⛅虚拟化实现方式&#x1f320;应用程序执行环境分层&#x1f320;虚拟化常见类别☃️虚拟机☃️容器☃️JVM 之类的虚拟机 &#x1f320;常见虚拟化实现☃️主机虚拟化(虚拟机)实现☃️容器虚拟化实现 ⛅虚…

备战蓝桥杯————差分数组2

目录 引言 一、拼车 题目描述 解题思路及代码 结果展示 二、航班预定统计 题目描述 解题思路及代码 结果展示 总结 引言 在现代交通管理中&#xff0c;拼车服务和航班预订系统是提高资源利用效率、优化用户体验的关键技术。随着城市交通压力的增大和航空业的快速发…

设计模式-结构模式-装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;&#xff1a;动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。 //首先&#xff0c;定义一个组件接口&#xff1a; public in…

Sqli-labs靶场第12关详解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post传参了 根据题目看&#xff0c;像一个登录页面&#xff0c;尝试使用布尔型盲注测试能否登录网站 1. Username输入a a" 测试是否会有报错&#xff0c;burp抓包 报错&#xff1a;syntax to use near "a"") and passw…