Selenium系列(十七) - Web UI 自动化基础实战(4)
2020-04-04 15:40
1436 查看
如果你还想从头学起Selenium,可以看看这个系列的文章哦!
https://www.cnblogs.com/poloyy/category/1680176.html
其次,如果你不懂前端基础知识,需要自己去补充哦,博主暂时没有总结(虽然我也会,所以我学selenium就不用复习前端了哈哈哈...)
注意,目前的实战都是流水账式写的,后面才会结合框架+PO模式
目的是为了掌握所学的Selenium基础
实战题目
- 登录 http://www.51job.com
- 点击高级搜索
- 输入搜索关键词 python
- 地区选择 杭州
- 职能类别 选 计算机软件 -> 高级软件工程师
- 公司性质 选 上市公司
- 工作年限 选 1-3 年
- 搜索最新发布的职位, 抓取页面信息。 得到如下的格式化信息
Python开发工程师 | 杭州纳帕科技有限公司 | 杭州 | 0.8-1.6万/月 | 04-27
Python高级开发工程师 | 中浙信科技咨询有限公司 | 杭州 | 1-1.5万/月 | 04-27
代码思路(人为测试时的操作步骤)
- 点击【高级搜索】
- 关键字输入python
- 点击城市
- 显式等待,定位所有默认已选中的城市
- 取消选中它们
- 点击【北京】
- 点击【确定】
- 发现关键字输入框下方出现关键字历史记录,需要点击任意地方才能取消显示,所以随便找一个可点击元素进行点击
- 点击【职能类别输入框】
- 显式等待,点击【后端开发】
- 点击【高级软件工程师】
- 点击【确定】
- 点击【工作年限】,选择1-3年
- 点击【公司性质】,选择上市公式
- 点击【搜索】
- 定位职位列表,除了第一行
- 循环职位列表,获取每一行的信息存入列表
- 格式化输出
代码
# !/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 自动化基础实战(5)
- Selenium系列(十九) - Web UI 自动化基础实战(6)
- Selenium系列(十四) - Web UI 自动化基础实战(1)
- Selenium系列(十六) - Web UI 自动化基础实战(3)
- 【自动化测试技术QTP基础系列八】---检查点
- Selenium2学习-008-WebUI自动化实战实例-006-易迅登录之 frame 处理
- Selenium2 Python 自动化测试实战学习笔记(三)
- CCNP精粹系列之十七--路由映射实战,博主推荐
- Hadoop大数据零基础高端实战培训系列配文本挖掘项目
- Selenium 实战到吹牛系列:八
- 基于PaddlePaddle的图像分类实战 | 深度学习基础任务教程系列(一)
- Docker系列一之基础快速入门企业实战
- 自动化测试开发实际应用系列(四)应用Selenium + NUNIT对动态WEB测试自动化
- 基于《Selenium 2自动化测试实战》的学习笔记(1)—— 软件测试分类
- selenium+testng+gitblit+jenkins+ant自动化测试系列七:jenkins安装及基础配置
- Selenium2 Python 自动化测试实战学习笔记(二)
- Selenium学习笔记之003:Web UI自动化知识点整理
- Selenium3与Python3实战Web自动化测试框架
- 2019最新Spring Boot从入门到实战 基础实战系列教程全集
- Hadoop大数据零基础高端实战培训系列配文本挖掘项目