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. UDP与TCP ---FundeBug

    UDP 面向无连接 首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了.并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作. 具体来说就是: ...

  2. Linux CentOS Docker 安装、加载配置

    Docker Version:2.10.2 OS: CentOS 7 1.卸载 $ sudo yum remove docker \ docker-client \ docker-client-lat ...

  3. java 在 map put方法是报 java.lang.NullPointerException的异常 处理办法

    当在定义map变量时,如果没有初始化对象,那么默认map值为空的,此时对map进行操作,会报空指针异常,解决办法就是初始化map变量 或者,直接初始化变量,不用在代码块里面设置 Map<Stri ...

  4. SQLyog 13.1.1.0注册码证书秘钥

    注册信息: Name:(用户名随意) License Key: Professional: 8e053a86-cdd3-48ed-b5fe-94c51b3d343c Enterprise: a4668 ...

  5. WPF中转换与关键帧动画及报错:WPF动画找不到依赖属性:属性未指向路径“(0).(1)[3].(2)”中的 DependencyObject

    WPF中的转换有: // 在二维 x-y 坐标系内围绕指定点按顺时针方向旋转对象. <RotateTransform /> // 在二维 x-y 坐标系中平移(移动)对象. <Tra ...

  6. 关于Windows10纯净启动的相关修改流程

    关于纯净启动的相关流程 自动登录 打开命令提示符运行control userpasswords2后回车 在弹出的用户账户窗口中,取消勾选"要使用本计算机,用户必须输入用户名和密码" ...

  7. windows tips

    u启动经典dos工具实现硬盘分区教程 https://jingyan.baidu.com/article/a3f121e4dbe55afc9052bbfe.html?st=2&net_type ...

  8. BitBake使用攻略--BitBake的语法知识二

    目录 写在前面 1. BitBake中的任务 2. 任务配置 2.1 依赖 2.1.1 内部任务间的依赖 2.1.2 不同菜谱下的任务间依赖 2.1.3 运行时态下的依赖 2.1.4 递归依赖 2.1 ...

  9. Java笔记第九弹

    升级版: 数据安全问题的解决 1.同步代码块 (弊端:降低了运行效率) 格式:(锁--同一把锁) synchronized(任意对象){ 多条语句操作共享数据的代码 } //sellTicket.ja ...

  10. python爬虫基础教程

    爬虫介绍 爬虫就是程序,是从互联网中,各个网站上爬取数据(能浏览到的网页才可以爬),做数据清洗,入库 爬虫本质: 模拟http请求,获取数据,入库 网站/app > 抓包 我们日常使用的baid ...