Selenium系列(十七) - Web UI 自動化基礎實戰(4)


如果你還想從頭學起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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM