如果你还想从头学起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. Docker未授权漏洞(2375)

    漏洞验证 直接使用浏览器访问 http://ip:2335 http://ip:2335/version http://ip:2335/info docker -H tcp://ip:2375 ver ...

  2. 文件包含 & LFI-labs靶场

    文件包含漏洞学习 冲冲冲,好好学习 2020.1.30 认真对待自己做出的每一个决定 知识与实践 Q:什么是文件包含? A:简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含 ...

  3. fiddler各种颜色锁说明

  4. Android逆向工程师的黑科技

    你们发现了吗?Android逆向.安全方面的工程师真的越来越"稀有"了. 以腾讯.美团.百度为代表的大厂们,在某招聘网站上居然薪酬高达30-60k. 现在移动端市场越来越火热,AP ...

  5. Vue-Promise

    promise 就是一种异步编程的的解决方案 当执行网络请求的时候,代码就会出现阻塞,下面的代码要等待请求完成了在运行,所以我们一般网络请求的时候就去开启一个异步任务,一边请求一边执行其他代码 请求到 ...

  6. Spring学习01(IOC)

    1.Spring概述 简介 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. 2004年3月24日,Spring框架以interface21框架为基础,经过 ...

  7. HashMap底层实现-基础

    1.数据结构 1.7 数组+链表,键值对是以Entry内部类的数组存放的.键计算得到哈希值是该数组的下标.又称桶数组当存在哈希冲突时,会通过Entry类内部的成员变量 Entry<k,v> ...

  8. Python语言系列-02-基础数据类型

    格式化输出 #!/usr/bin/env python3 # author:Alnk(李成果) # 百分号% 格式化输出 name = input('姓名:') age = input('年龄:') ...

  9. minio设置永久访问链接

    1.通过minio分享的链接只能支持7天. 解决方案是设置对应的bucket 可通过路径直接访问.(必须通过minio client才能设置下载策略) wget https://dl.min.io/c ...

  10. Java入门姿势【面向对象3】构造方法及其重载_方法的调用

    上次我为大家写出啦"定义类与创建对象_了解局部变量",上篇文章代码可能较多,如没有了解透彻的话请打开下方文章在进行观看一下哦!! [Java入门姿势[面向对象2]定义类与创建对象_ ...