selenium部分总结

最近写了一个selenium自动化脚本. 基于此总结一些常用的代码

1. 用户输入换行符不终止输入

strings = ''
s = input('请输入:(q停止输入)')
while s != 'q': # 此处可自行设置
strings = strings + s + '\n'
s = input() """
输入:
B07RW2M73Y
B0943TBH7K
B08NVVWXYL
B0B3STVYGY
B07FT1HSZB
B0BPWYR45Z
B0BDYT8HQ7
q
"""

2.操作stealth.min.js文件隐藏浏览器指纹特征. 避免google反爬

  • 下载stealth.min.js文件
https://gitcode.net/mirrors/requireCool/stealth.min.js/-/blob/main/stealth.min.js
  • 添加到程序中
web = Chrome()
# 读取文件
with open('stealth.min.js', 'r') as f:
js = f.read()
# 调用函数在页面加载前执行脚本
web.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': js})
web.get(url)

3.显示等待

使用场景: 当不确定页面标签什么时候加载出来. 设置太长的睡眠时间又太浪费. 这时候就可以设置显示等待. 等待标签出现. 立刻进行下一步操作

# 显示等待, timeout=120, 每0.5秒检查一次标签是否存在
WebDriverWait(web, 120, 0.5).until(
# 条件:直到元素加载完成
EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[1]/div[2]/header/div[1]/nav/ul/ul/li[2]/a'))
).click()

4.封装了一个判断页面标签是否存在的函数

def isElementPresent(web, path):
"""
用来判断元素标签是否存在,
"""
try:
web.find_element(By.XPATH, path)
# 原文是except NoSuchElementException, e:
except NoSuchElementException as e:
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
return False
else:
return True

5. selenium执行js代码

# js点击export
js= """
document.evaluate('/html/body/div[1]/div[2]/div[1]/div[2]/div/div[2]/div/div[2]/div[1]/div[2]/div[2]/div/button', document).iterateNext().click()
"""
web.execute_script(js)
time.sleep(3)
# 清空输入框内容
clear_js = """
const parentElement = document.querySelector('#re-container > div.sc-iYosqi.bzA-dlM > div.sc-JOToA.jJhRrE > div.sc-eSnCNH.enpqfV > div > form > div.sc-dAsQPr.bYouva > div > div'); // 选择父级元素
const spanElements = parentElement.querySelectorAll('#re-container > div.sc-iYosqi.bzA-dlM > div.sc-JOToA.jJhRrE > div.sc-eSnCNH.enpqfV > div > form > div.sc-dAsQPr.bYouva > div > div > span'); // 选择所有的 <span> 子元素 spanElements.forEach(spanElement => {
parentElement.removeChild(spanElement); // 删除每一个 <span> 子元素
});
"""
web.execute_script(clear_js)

6. 配置无头浏览器

chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
web = Chrome(chrome_options=chrome_options)

7. 图鉴打码(0.002元一次)

# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
# 4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005: 快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66: 问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 : 旋转类型
#
# 三、图片坐标点选类型:
# 19 : 1个坐标
# 20 : 3个坐标
# 21 : 3 ~ 5个坐标
# 22 : 5 ~ 8个坐标
# 27 : 1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
base64_data = base64.b64encode(f.read()) # read()字节 => b64字符串
b64 = base64_data.decode() # b64字符串是图片
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
if result['success']:
return result["data"]["result"]
else:
return result["message"] result = base64_api(uname='ifeng', pwd='xxxxxx', img="check.png", typeid=1)
print(result) # 验证码

8. selenium部署到服务器上定时运行

  1. 先写一个执行的脚本book.sh
source /envs/day06/bin/activate  # 打开linux的python虚拟环境
python /root/order-trading-platform/script/test.py
deactivate # 关闭虚拟环境
  1. 为该脚本添加权限
chmod +x book.sh
  1. 在crontab指定该脚本
  • 先进入crontab编辑

    crontab -e

  • 添加定时任务: 每天六点执行book.sh

    0 6 * * * /root/order-trading-platform/script/book.sh

selenium部分知识点总结的更多相关文章

  1. 关于python中selenium一些知识点

    selenium几种元素操纵方法 切换iframe层 #切换至xx iframe层 driver.switch_to.frame("name and id") # 切回主HTML层 ...

  2. 虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_183 2021年,对于正在找工作的朋友来说,笼罩在新冠肺炎疫情之下,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各 ...

  3. selenium + python自动化测试unittest框架学习(四)python导入模块及包知识点

    在写脚本的时候,发现导入某些模块,经常报错提示导入模块失败,这里来恶补下python导入模块的知识点. 1.模块导入时文件查找顺序 在脚本中,import xxx模块时的具体步骤: (1)新建一个mo ...

  4. python爬虫知识点总结(八)Selenium库详解

    官方学习文档:http://selenium-python.readthedocs.io/api.html 一.什么是Selenium? 答:自动化测试工具,支持多种浏览器.用来驱动浏览器,发出指令让 ...

  5. selenium知识点

    1. 导包 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from se ...

  6. 浅谈学习selenium的一些知识点的总结

    学习自动化测试,先得学习一门语言.自动化对语言要求掌握的程度不深,但必须得会基本的入门语法. 我学习的是python2,简单,易懂,上手快. 每天敲就是了. 我的学习路径是: 先学习一段时间pytho ...

  7. python selenium 实战涉及很多知识点

    1.iframe的切入和切出 #切入 driver.switch_to.frame(driver.find_element_by_id('iFrame_1')) # 切换出来 driver.switc ...

  8. Selenium+java自动化测试常用知识点

    一.元素的定位 1.通过ID定位元素: findElement(By.id(element)); 2.通过元素的名称定位元素: findElement(By.name(element)); 3.通过元 ...

  9. Python爬虫学习(9):Selenium的使用

    1 简介以及安装 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Seleni ...

  10. Selenium WebDriver 之 PageObjects 模式 by Example

    目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...

随机推荐

  1. B树、B+树详解

    B树.B+树详解   B树 前言 首先,为什么要总结B树.B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树 ...

  2. (六).JavaScript的数组(2)

    1.10 作用域链 定义: 作用域链:查找变量的过程 作用: 查找变量 查找规则:首先会在自身作用域找变量,找到就用 如果没有,就去上级作用域查找,找到就用 如果没有,一直往上找,直到全局作用域,有就 ...

  3. Delphi集合增删的另一种操作

    D7 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, ...

  4. 网络数据请求get&post

  5. 关于uni-app开发的微信小程序顶部导航条机型适配

    背景: 小程序顶部导航栏那里的样式和功能都是小程序自带的,当我们在pages.json里的pages里新加一条页面配置时,会自动生成一个带顶部导航栏的空白页面,当然也可以再配置里"navig ...

  6. appium之手机操作的方法

    Appium内置方法,来操作手机.在做app自动化时,可以内置方法的基本上,对一些常用的手机操作进行方法的封装. 常用的方法有: 获取手机分辨率: driver.get_window(size) # ...

  7. Python练习--简单习题(也是一看就能够写出来的代码)

    Python计算列表数字的和 数字范围内的所有偶数(append) 移除列表中的多个元素(remove) 如何实现对列表的去重 如何对简单列表进行排序 Python实现学生的排序11)

  8. Android笔记-跳转到相册选择图片

    跳转到相册选择图片 即设置一个点击事件,点击之后即可跳转到相册进行图片的选择 具体的实现步骤: 界面很简单的啦,这里就直接将源代码放出来啦: <?xml version="1.0&qu ...

  9. VsCode新建Java、SpringBoot、Python、JavaWeb项目的基本步骤

    新建Java项目 选中正上方的搜索框,按下F1快捷键,输入create Java,即可出现这样的一个命令: 选中这个: 然后为新创建的项目选择一个合适的位置就好啦! 新建SpringBoot项目 选中 ...

  10. 文件的上传&预览&下载学习(四)

    0.参考博客 https://blog.csdn.net/Chengzi_comm/article/details/53037967 逻辑清晰 https://blog.csdn.net/alli09 ...