实战题目

  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
Selenium系列(17) - Web UI 自动化基础实战(4) - 图1
Selenium系列(17) - Web UI 自动化基础实战(4) - 图2

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

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

代码

  1. # !/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. __title__ =
  5. __Time__ = 2020/3/25 17:52
  6. __Author__ = 小菠萝测试笔记
  7. __Blog__ = https://www.cnblogs.com/poloyy/
  8. """
  9. from time import sleep
  10. from selenium import webdriver
  11. from selenium.webdriver.support.wait import WebDriverWait
  12. from selenium.webdriver.common.by import By
  13. from selenium.webdriver.support import expected_conditions as ec
  14. # 加载驱动
  15. driver = webdriver.Chrome("../resources/chromedriver.exe")
  16. def wait_element(driver, by_, element_, timeout=10):
  17. element = WebDriverWait(driver, timeout=timeout).until(
  18. ec.presence_of_element_located(
  19. (by_, element_)
  20. )
  21. )
  22. return element
  23. def wait_elements(driver, by_, element_, timeout=10):
  24. element = WebDriverWait(driver, timeout=timeout).until(
  25. ec.presence_of_all_elements_located(
  26. (by_, element_)
  27. )
  28. )
  29. return element
  30. # 加载驱动
  31. driver = webdriver.Chrome("../resources/chromedriver.exe")
  32. # 打开网站
  33. driver.get("http://www.51job.com")
  34. driver.maximize_window()
  35. # 高级搜索
  36. more_btn = wait_element(driver, By.CLASS_NAME, "more").click()
  37. # 职位框
  38. wait_element(driver, By.ID, "kwdselectid").send_keys("python")
  39. # 城市按钮
  40. driver.find_element_by_id("work_position_click").click()
  41. # layer
  42. layer = wait_element(driver, By.ID, "work_position_layer")
  43. # 城市列表
  44. city_list = wait_elements(driver, By.CSS_SELECTOR, "div#work_position_click_center_right_list_000000 table em.on")
  45. for city in city_list:
  46. sleep(1)
  47. city.click()
  48. # 杭州
  49. wait_element(driver, By.ID, "work_position_click_center_right_list_category_000000_080200").click()
  50. # 确认
  51. wait_element(driver, By.ID, "work_position_click_bottom_save").click()
  52. # form
  53. wait_element(driver, By.CSS_SELECTOR, "div#historylist>div.r1").click()
  54. # 职能类别
  55. wait_element(driver, By.ID, "funtype_click").click()
  56. # 职能弹窗
  57. type_layer = wait_element(driver, By.ID, "funtype_layer")
  58. # 后端开发
  59. wait_element(driver, By.ID, "funtype_click_center_right_list_category_0100_0100").click()
  60. # f如果有已选列表,取消选择
  61. flag = wait_element(driver, By.ID, "funtype_click_multiple_selected")
  62. if flag.text:
  63. # 已选列表
  64. type_list = wait_elements(driver, By.CSS_SELECTOR, "div#funtype_click_multiple_selected>span")
  65. for types in type_list:
  66. if types.text == "高级软件工程师":
  67. continue
  68. em = types.find_element_by_tag_name("em")
  69. em.click()
  70. # 高级软件工程师
  71. wait_element(driver, By.ID, "funtype_click_center_right_list_sub_category_each_0100_0106").click()
  72. # 确定
  73. driver.find_element_by_id("funtype_click_bottom_save").click()
  74. # 公司性质
  75. company = wait_element(driver, By.ID, "cottype_list")
  76. company.click()
  77. # 列表
  78. ctype_list = company.find_elements_by_css_selector("div.ul > span")
  79. for ctype in ctype_list:
  80. # 外资(欧美)没有数据
  81. if ctype.text == "上市公司":
  82. ctype.click()
  83. break
  84. # 工作年限
  85. workyear_list = wait_element(driver, By.ID, "workyear_list")
  86. workyear_list.click()
  87. # 列表
  88. wlist = workyear_list.find_elements_by_css_selector("div.ul > span")
  89. for wtype in wlist:
  90. if wtype.text == "1-3年":
  91. wtype.click()
  92. break
  93. # 搜索按钮
  94. wait_element(driver, By.CSS_SELECTOR, "div.btnbox > span.p_but").click()
  95. # 职位列表
  96. resultList = wait_elements(driver, By.CSS_SELECTOR, "div#resultList>div.el")[1:]
  97. for res in resultList:
  98. spans = res.find_elements_by_tag_name("span")
  99. texts = [x.text for x in spans]
  100. # 最终输出
  101. print(" | ".join(texts))
  102. sleep(10)
  103. driver.quit()

转载: https://www.cnblogs.com/poloyy/p/12632106.html