如果你还想从头学起Selenium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)

注意,目前的实战都是流水账式写的,后面才会结合框架+PO模式

目的是为了掌握所学的Selenium基础

实战题目

  1. 登录 http://www.51job.com
  2. 点击高级搜索
  3. 输入搜索关键词 python
  4. 地区选择 杭州
  5. 职能类别 选 计算机软件 -> 高级软件工程师
  6. 公司性质 选 上市公司
  7. 工作年限 选 1-3 年
  8. 搜索最新发布的职位, 抓取页面信息。 得到如下的格式化信息

Python开发工程师 | 杭州纳帕科技有限公司 | 杭州 | 0.8-1.6万/月 | 04-27

Python高级开发工程师 | 中浙信科技咨询有限公司 | 杭州 | 1-1.5万/月 | 04-27

代码思路(人为测试时的操作步骤)

  1. 点击【高级搜索】
  2. 关键字输入python
  3. 点击城市
  4. 显式等待,定位所有默认已选中的城市
  5. 取消选中它们
  6. 点击【北京】
  7. 点击【确定】
  8. 发现关键字输入框下方出现关键字历史记录,需要点击任意地方才能取消显示,所以随便找一个可点击元素进行点击
  9. 点击【职能类别输入框】
  10. 显式等待,点击【后端开发】
  11. 点击【高级软件工程师】
  12. 点击【确定】
  13. 点击【工作年限】,选择1-3年
  14. 点击【公司性质】,选择上市公式
  15. 点击【搜索】
  16. 定位职位列表,除了第一行
  17. 循环职位列表,获取每一行的信息存入列表
  18. 格式化输出

代码

# !/usr/bin/env python
# -*- coding: utf-8 -*- """
__title__ =
__Time__ = 2020/3/25 17:52
__Author__ = 小菠萝测试笔记
__Blog__ = https://www.cnblogs.com/poloyy/
"""

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec # 加载驱动
driver = webdriver.Chrome("../resources/chromedriver.exe") def wait_element(driver, by_, element_, timeout=10):
element = WebDriverWait(driver, timeout=timeout).until(
ec.presence_of_element_located(
(by_, element_)
)
)
return element def wait_elements(driver, by_, element_, timeout=10):
element = WebDriverWait(driver, timeout=timeout).until(
ec.presence_of_all_elements_located(
(by_, element_)
)
)
return element # 加载驱动
driver = webdriver.Chrome("../resources/chromedriver.exe") # 打开网站
driver.get("http://www.51job.com")
driver.maximize_window() # 高级搜索
more_btn = wait_element(driver, By.CLASS_NAME, "more").click() # 职位框
wait_element(driver, By.ID, "kwdselectid").send_keys("python") # 城市按钮
driver.find_element_by_id("work_position_click").click() # layer
layer = wait_element(driver, By.ID, "work_position_layer")
# 城市列表
city_list = wait_elements(driver, By.CSS_SELECTOR, "div#work_position_click_center_right_list_000000 table em.on")
for city in city_list:
sleep(1)
city.click() # 杭州
wait_element(driver, By.ID, "work_position_click_center_right_list_category_000000_080200").click() # 确认
wait_element(driver, By.ID, "work_position_click_bottom_save").click() # form
wait_element(driver, By.CSS_SELECTOR, "div#historylist>div.r1").click() # 职能类别
wait_element(driver, By.ID, "funtype_click").click() # 职能弹窗
type_layer = wait_element(driver, By.ID, "funtype_layer") # 后端开发
wait_element(driver, By.ID, "funtype_click_center_right_list_category_0100_0100").click() # f如果有已选列表,取消选择
flag = wait_element(driver, By.ID, "funtype_click_multiple_selected")
if flag.text:
# 已选列表
type_list = wait_elements(driver, By.CSS_SELECTOR, "div#funtype_click_multiple_selected>span")
for types in type_list:
if types.text == "高级软件工程师":
continue
em = types.find_element_by_tag_name("em")
em.click() # 高级软件工程师
wait_element(driver, By.ID, "funtype_click_center_right_list_sub_category_each_0100_0106").click() # 确定
driver.find_element_by_id("funtype_click_bottom_save").click() # 公司性质
company = wait_element(driver, By.ID, "cottype_list")
company.click() # 列表
ctype_list = company.find_elements_by_css_selector("div.ul > span")
for ctype in ctype_list:
# 外资(欧美)没有数据
if ctype.text == "上市公司":
ctype.click()
break # 工作年限
workyear_list = wait_element(driver, By.ID, "workyear_list")
workyear_list.click() # 列表
wlist = workyear_list.find_elements_by_css_selector("div.ul > span")
for wtype in wlist:
if wtype.text == "1-3年":
wtype.click()
break # 搜索按钮
wait_element(driver, By.CSS_SELECTOR, "div.btnbox > span.p_but").click() # 职位列表
resultList = wait_elements(driver, By.CSS_SELECTOR, "div#resultList>div.el")[1:]
for res in resultList:
spans = res.find_elements_by_tag_name("span")
texts = [x.text for x in spans]
# 最终输出
print(" | ".join(texts)) sleep(10)
driver.quit()

Selenium系列(十七) - Web UI 自动化基础实战(4)的更多相关文章

  1. Selenium系列(十四) - Web UI 自动化基础实战(1)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  2. Selenium系列(十五) - Web UI 自动化基础实战(2)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  3. Selenium系列(十六) - Web UI 自动化基础实战(3)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  4. Selenium系列(十八) - Web UI 自动化基础实战(5)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  5. Selenium系列(十九) - Web UI 自动化基础实战(6)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. selenium(12)-web UI自动化项目实战(PO模式,代码封装)

    web UI自动化项目实战-项目 项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见 https://www.cnblogs.com/xinhua19/p/13151296.html 搭建U ...

  7. 【Robot Framework 项目实战 02】SeleniumLibrary Web UI 自动化

    前言 SeleniumLibrary 是针对 Robot Framework 开发的 Selenium 库.它也 Robot Framework 下面最流程的库之一.主要用于编写 Web UI 自动化 ...

  8. Python Selenium 搭建Web UI自动化

    Python搭建UI自动化环境 下载Python3 Python官网 PyCharm 环境配置 安装Python 勾选Add Python to PATH,一直下一步. 验证:CMD输入Python ...

  9. Python—UI自动化完整实战

    实战项目 均来源于互联网 测试报告2017年11月29日优化后的测试报告:https://github.com/defnngj/HTMLTestRunner 1.项目概述: 本实战已126邮箱为例子进 ...

随机推荐

  1. Windows系统安装Mariadb数据库(zip包方式安装)--九五小庞

    1.去Mariadb官网下载zip安装包 下载地址:https://downloads.mariadb.org/mariadb/10.3.31/ 2.解压压缩包到指定的安装位置 3.在安装包的data ...

  2. Java 17 将要发布,补一下 Java 13 中的新功能

    本文章属于Java 新特性教程 系列,已经收录在 Github.com/niumoo/JavaNotes ,点个赞,不迷路. 自从 Oracle 调整了 Java 的版本发布节奏之后,Java 版本发 ...

  3. AQS学习(一)自旋锁原理介绍(为什么AQS底层使用自旋锁队列?)

    1.什么是自旋锁? 自旋锁作为锁的一种,和互斥锁一样也是为了在并发环境下保护共享资源的一种锁机制.在任意时刻,只有一个执行单元能够获得锁. 互斥锁通常利用操作系统提供的线程阻塞/唤醒机制实现,在争用锁 ...

  4. 绿色djvu阅读软件

    官方的djvu viewer都需要安装,总算找到一个绿色版的,名为STDU Viewer,可以阅读的格式包括DjVu, PDF, TIFF, XPS, FB2等,版本为1.6.2.

  5. etcd学习(6)-etcd实现raft源码解读

    etcd中raft实现源码解读 前言 raft实现 看下etcd中的raftexample newRaftNode startRaft serveChannels 领导者选举 启动并初始化node节点 ...

  6. 【原创】利用动态二进制加密实现新型一句话木马之PHP篇

    概述 本系列文章重写了java..net.php三个版本的一句话木马,可以解析并执行客户端传递过来的加密二进制流,并实现了相应的客户端工具.从而一劳永逸的绕过WAF或者其他网络防火墙的检测. 本来是想 ...

  7. SQL 练习34

    求每门课程的学生人数 SELECT cid,COUNT(cid) 课程人数 from sc GROUP BY cid

  8. ☕【Java技术指南】「OpenJDK专题」想不想编译属于你自己的JDK呢?(Windows10环境)

    Win10下编译OpenJDK8 编译环境 Windows10专业版64位: 编译前准备 Tip: 以下软件的安装和解压目录尽量不要包含中文或空格,不然可能会出现问题 安装 Visual Studio ...

  9. 题解 string

    传送门 考试的时候只来得及糊了个\(n^4\)的暴力,结果考完发现\(n^2\)比\(n^4\)还好写 题意就是就是要求把一堆字符串的前后缀拼起来之后在原串中出现了多少次 然而前后缀可以有很多,再枚举 ...

  10. 【硬件模块】UWB介绍

    From: https://liudongdong1.github.io/ UWB超宽带定位技术属于无线定位技术的一种.无线定位技术是指用来判定移动用户位置的测量方法和计算方法,即定位算法.目前最常用 ...