selenium部分总结

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

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

  1. strings = ''
  2. s = input('请输入:(q停止输入)')
  3. while s != 'q': # 此处可自行设置
  4. strings = strings + s + '\n'
  5. s = input()
  6. """
  7. 输入:
  8. B07RW2M73Y
  9. B0943TBH7K
  10. B08NVVWXYL
  11. B0B3STVYGY
  12. B07FT1HSZB
  13. B0BPWYR45Z
  14. B0BDYT8HQ7
  15. q
  16. """

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

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

3.显示等待

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

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

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

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

5. selenium执行js代码

  1. # js点击export
  2. js= """
  3. 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()
  4. """
  5. web.execute_script(js)
  6. time.sleep(3)
  1. # 清空输入框内容
  2. clear_js = """
  3. 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'); // 选择父级元素
  4. 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> 子元素
  5. spanElements.forEach(spanElement => {
  6. parentElement.removeChild(spanElement); // 删除每一个 <span> 子元素
  7. });
  8. """
  9. web.execute_script(clear_js)

6. 配置无头浏览器

  1. chrome_options = Options()
  2. chrome_options.add_argument('--no-sandbox')
  3. chrome_options.add_argument('--disable-dev-shm-usage')
  4. chrome_options.add_argument('--headless')
  5. web = Chrome(chrome_options=chrome_options)

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

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

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

  1. 先写一个执行的脚本book.sh
  1. source /envs/day06/bin/activate # 打开linux的python虚拟环境
  2. python /root/order-trading-platform/script/test.py
  3. deactivate # 关闭虚拟环境
  1. 为该脚本添加权限
  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. shortcuts

    关闭选项卡 Ctrl+W 关闭当前窗口 alt + F4 alt + 空格 + c alt + 空格 + n 最小化窗口 alt + 空格 + x 最大化窗口 ALT+F4 关闭当前应用程序 ctrl ...

  2. MySql数据库读取字段错误问题

    一个小小的BUG,断断续续搞了一个月才搞定,使用MySql的时候使用mysql_fetch_fields()获取的字段始终始终是错误的,因为是修改别人的代码,一直找不到问题,Debug了无数次还是搞不 ...

  3. 8.Vuex状态管理

    一.Vuex 概述 1.1 组件之间共享数据的方式 父传子: v-bind 属性绑定 子传父: v-on 事件绑定 兄弟组件之间共享数据: EventBus $on 接收数据的那个组件 (数据接收方) ...

  4. hbase master 无法启动

    环境部署: hbase 采用azure的虚机,存储采用azure的blockblob. 问题: 生产碰到过几次,hbase master无法启动的问题,这种情况下是可以正常读写,但是如果这个时候,发生 ...

  5. 【QT5】学习整理包含引用资料

    视频学习资料 [[6天学会QT] 视频教程及QT5.11.1安装包安装方法][含代码]](https://www.bilibili.com/video/BV1hg4y1B7Vu?from=search ...

  6. DFS专题1

    例题一 39.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 , ...

  7. 禅道 docker 部署

    官方文档:https://hub.docker.com/r/idoop/zentao 1.创建本地目录:mkdir -p /data/zbox 2.启动容器: sudo docker run -itd ...

  8. ajax缓存和fiddler——http协议调试代理工具

    1.在ie9下,ajax请求可能会有缓存,需要在请求上一个随机数 如:Math.random(); 2.fiddler2 打开以后可以查看所有的http请求情况,也可以使用本地脚本代替要请求的js文件 ...

  9. luffy项目全局配置

    一:media文件夹配置 settings.dev下配置media文件夹,暴露资源 media_path=BASE_DIR.parentMEDIA_ROOT=Path(media_path).join ...

  10. 基于element-ui进行二次封装的表格组件

    <!-- * @description 表格组件 * @fileName TableList.vue * @authorQ * @date 2021/05/15 15:13:45 --> ...