Selenium 作业 1
- 请到如下网址下载最新Chrome浏览器 的 web driver 驱动
https://chromedriver.storage.googleapis.com/index.html
- pip 安装Selenium Web driver Python 客户端库
练习1
1 访问如下网站,
http://121866.com
先注册一个账号, 记住用户名和密码。
2 然后开发一个自动化程序, 使用 用户名密码 自动化登录该网站,
并通过检查登录后右上角显示的用户名判断,是否登录成功。
练习2
1. 访问天气查询网站(网址如下),查询江苏省天气
http://www.weather.com.cn/html/province/jiangsu.shtml
2. 获取江苏所有城市的天气,并找出其中每天最低气温最低的城市,显示出来,比如
温度最低为12℃, 城市有连云港 盐城
练习1 from selenium import webdriver import time driver = webdriver.Chrome(r"d: oolswebdriverschromedriver.exe") # ------------------------ driver.get('http://121866.com/cust/sign.html') driver.find_element_by_id("username").send_keys('xxxx') driver.find_element_by_id("password").send_keys('xxxx') driver.find_element_by_id("btn_sign").click() time.sleep(2) expectStr = driver.find_element_by_id("username").text if 'xxxx' == expectStr: print('测试通过') else: print('测试不通过') # ------------------------ input() driver.quit() 练习2
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.weather.com.cn/html/province/jiangsu.shtml")
cityWeather = driver.find_element_by_id("forecastID").text.split("℃ ")
print(cityWeather)
lowestweather = 100
lowestcity = []
for one in cityWeather:
one = one.replace(u'℃','')
print(one)
curweather = int(one.split(' ')[-1].split('/')[-1])
if curweather < lowestweather:
lowestweather = curweather
lowestcity.append(one.split(' ')[-2])
elif curweather == lowestweather:
lowestcity.append(one.split(' ')[-2])
print('温度最低为%s℃, 城市有%s' % (lowestweather, ' '.join(lowestcity)))
driver.quit()
方法2:
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.weather.com.cn/html/province/jiangsu.shtml") cityWeather = driver.find_element_by_id("forecastID").text.split("℃ ") print(cityWeather) lowestweather = 100 lowestcity = [] for one in cityWeather: one = one.replace(u'℃','') print(one) curweather = int(one.split(' ')[-1].split('/')[-1]) if curweather < lowestweather: lowestweather = curweather lowestcity.append(one.split(' ')[-2]) elif curweather == lowestweather: lowestcity.append(one.split(' ')[-2]) print('温度最低为%s℃, 城市有%s' % (lowestweather, ' '.join(lowestcity))) driver.quit()
Selenium 作业 2
打开百度新歌榜, http://music.baidu.com/top/new
在排名前50的歌曲中,找出其中排名上升的歌曲和演唱者
注意: 有的歌曲名里面有 "影视原声" 这样的标签, 要去掉
最终结果显示的结果如下:
我不能忘记你 : 林忆莲
等 : 严艺丹
飞天 : 云朵
粉墨 : 霍尊
春风十里不如你 : 李健
方法1 # coding:utf8 from selenium import webdriver driver = webdriver.Chrome(r"d: oolswebdriverschromedriver.exe") # driver.implicitly_wait(1) # 抓取排行榜信息 driver.get('http://music.baidu.com/top/new') # 层层往下查找 div = driver.find_element_by_id("songListWrapper") ul = div.find_element_by_tag_name("ul") liList = ul.find_elements_by_tag_name('li') for li in liList: # 哪些 是有 有up 标签的 歌曲, F12 查看特性 upTags = li.find_elements_by_class_name("up") if upTags: # 由于只要 歌曲名和 演唱者名 title = li.find_element_by_class_name("song-title") titleStr = title.find_element_by_tag_name("a").text authorsStr = li.find_element_by_class_name("author_list").text print('{:10s}:{}'.format(titleStr, authorsStr)) driver.quit()
方法2:
# encoding:utf-8 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("http://music.taihe.com/top/new") sleep(5) try: driver.find_element_by_xpath('//*[@id="subPage"]/div[8]/div[2]/span').click() print("广告已经被点击掉") except Exception as e: print("searchKey: there is no suspond Page1. e = {e}") sleep(2) div = driver.find_element_by_id("songListWrapper") ul = div.find_element_by_tag_name("ul") liList = ul.find_elements_by_tag_name("li") for li in liList: cla = li.find_elements_by_class_name("down") spa = li.find_elements_by_class_name("appendix") if len(cla) > 0: title = li.find_element_by_class_name("song-title ") yuanMa = title.text # print(yuanMa) if "影视原声" not in yuanMa: titleStr = title.find_element_by_tag_name("a").text authorList = li.find_element_by_class_name("author_list").text print(titleStr, authorList) driver.quit()
Selenium 作业 3
登录 51job ,
http://www.51job.com
输入搜索关键词 "python", 地区选择 "杭州"(注意,如果所在地已经选中其他地区,要去掉),
搜索最新发布的职位, 抓取页面信息。 得到如下的格式化信息
Python开发工程师 | 杭州纳帕科技有限公司 | 杭州 | 0.8-1.6万/月 | 04-27
Python高级开发工程师 | 中浙信科技咨询有限公司 | 杭州 | 1-1.5万/月 | 04-27
高级Python开发工程师 | 杭州新思维计算机有限公司 | 杭州-西湖区 | 1-1.5万/月 | 04-27
方法一 # coding:utf8 from selenium import webdriver driver = webdriver.Chrome(r"d: oolswebdriverschromedriver.exe") # 别忘了设置 driver.implicitly_wait(10) # 抓取信息 driver.get('http://www.51job.com') driver.find_element_by_id('kwdselectid').send_keys('python') # 点击工作地点 driver.find_element_by_id('work_position_input').click() # 选择所有城市,去掉非杭州的且选择杭州, # 如果是杭州但是没有选,选上这些城市 cityEles = driver.find_elements_by_css_selector('#work_position_click_center_right em') for one in cityEles: cityName = one.text selected = one.get_attribute('class') # print cityName,seleted if cityName == u'杭州': if selected != 'on': one.click() else: if selected == 'on': one.click() # 保存城市选择 driver.find_element_by_id('work_position_click_bottom_save').click() # 点击搜索 driver.find_element_by_css_selector('.ush button').click() # 搜索结果分析 jobs = driver.find_elements_by_css_selector('#resultList div.el') for job in jobs: # 去掉第一行:标题行 if 'title' in job.get_attribute('class'): continue filelds = job.find_elements_by_tag_name('span') strField = [fileld.text for fileld in filelds] print (' | '.join(strField)) driver.quit() 方法二 # coding:utf8 from selenium import webdriver driver = webdriver.Chrome(r"d: oolswebdriverschromedriver.exe") driver.implicitly_wait(10) driver.get('http://www.51job.com') driver.find_element_by_id('kwdselectid').send_keys('python') driver.find_element_by_id('work_position_input').click() # 选择城市,去掉非杭州的,选择杭州 selectedCityEles = driver.find_elements_by_css_selector( '#work_position_click_center_right_list_000000 em[class=on]') for one in selectedCityEles: one.click() driver.find_element_by_id('work_position_click_center_right_list_category_000000_080200').click() # 保存城市选择 driver.find_element_by_id('work_position_click_bottom_save').click() driver.find_element_by_css_selector('div.ush > button').click() # 搜索结果分析 jobs = driver.find_elements_by_css_selector('#resultList div[class=el]') for job in jobs: fields = job.find_elements_by_tag_name('span') stringFilelds = [field.text for field in fields] print (' | '.join(stringFilelds)) driver.quit()
方法2:
from selenium import webdriver import time # 使用火狐浏览器,打开51job的链接 driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get("https://www.51job.com/") # 定位到输入框,并输入python driver.find_element_by_id("kwdselectid").send_keys('python') # 点击城市 pot = driver.find_element_by_xpath('//*[@id="work_position_click"]') pot.click() # 定位到城市的上层 cityEles = driver.find_elements_by_css_selector('#work_position_click_center_right em') # 获取城市名称、以及是否选中 for one in cityEles: cityName = one.text selected = one.get_attribute('class') # 如果城市名称叫杭州 并且未被选中就点击一下选中 if cityName == u'杭州': if selected != 'on': one.click() # 如果城市名称不叫杭州 但是被选中了就点击一下取消选择 else: if selected == 'on': one.click() # 点击确定按钮,关闭城市窗口 driver.find_element_by_id("work_position_click_bottom_save").click() time.sleep(2) # 在主页面点击搜索按钮,等待两秒之后,再结果页面打印所有表格中内容 driver.find_element_by_xpath('/html/body/div[3]/div/div[1]/div/button').click() time.sleep(2) # 定位到表格的行所在的位置 resultList = driver.find_elements_by_css_selector('#resultList div.el') for re in resultList: # 表格的第一行不要 if 'title' in re.get_attribute('class'): continue # 通过循环获取每一行的内容,把换行用|代替 t1 = re.text.replace(" ", "|") # 打印出所有内容 print(t1) driver.quit()
Selenium 作业 4
登录 http://www.51job.com
点击高级搜索
输入搜索关键词 python
地区选择 杭州
职能类别 选 计算机软件 -> 高级软件工程师
公司性质选 外资 欧美
工作年限选 1-3 年
搜索最新发布的职位, 抓取页面信息。 得到如下的格式化信息
Python开发工程师 | 杭州纳帕科技有限公司 | 杭州 | 0.8-1.6万/月 | 04-27
Python高级开发工程师 | 中浙信科技咨询有限公司 | 杭州 | 1-1.5万/月 | 04-27
# coding:utf8 from selenium import webdriver executable_path = r"d: oolswebdriverschromedriver.exe" driver = webdriver.Chrome(executable_path) driver.implicitly_wait(10) # 打开网址 driver.get('http://www.51job.com') # 选择高级搜索 driver.find_element_by_css_selector('div.ush > a').click() # 输入选择关键词 driver.find_element_by_id('kwdselectid').send_keys('python') # 工作地点选择 driver.find_element_by_id('work_position_input').click() # 取消 已经选择的 selectedCityEles = driver.find_elements_by_css_selector('#work_position_click_center em[class=on]') for one in selectedCityEles: one.click() # 选杭州 driver.find_element_by_id('work_position_click_center_right_list_category_000000_080200').click() # 保存选择 driver.find_element_by_id('work_position_click_bottom_save').click() # 要点一下别的地方, 否则下面的元素会被挡住 driver.find_element_by_css_selector('div.tit').click() # 职能类别 选 计算机软件 -> 高级软件工程师 driver.find_element_by_id('funtype_click').click() driver.find_element_by_id('funtype_click_center_right_list_category_0100_0100').click() driver.find_element_by_id('funtype_click_center_right_list_sub_category_each_0100_0106').click() driver.find_element_by_id('funtype_click_bottom_save').click() # 公司性质选 外资 欧美 driver.find_element_by_id('cottype_list').click() driver.find_element_by_css_selector('#cottype_list span.li[data-value="01"]').click() # 工作年限选 driver.find_element_by_id('workyear_list').click() driver.find_element_by_css_selector('#workyear_list span.li[data-value="02"]').click() # 点击搜索 driver.find_element_by_css_selector('div.p_sou > span.p_but').click() # 结果列表获取内容 jobs = driver.find_elements_by_css_selector('#resultList div[class=el]') for job in jobs: fields = job.find_elements_by_tag_name('span') stringFilelds = [field.text for field in fields] print (' | '.join(stringFilelds)) driver.quit()
方法2:
# encoding utf-8 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://www.51job.com/") driver.implicitly_wait(3) # 点击高级搜索 driver.find_element_by_css_selector('div.ush.top_wrap a.more').click() # 输入python driver.find_element_by_id('kwdselectid').send_keys('python') # 点击城市 driver.find_element_by_id('work_position_input').click() # 将杭州以外的城市取消选择 emList = driver.find_elements_by_css_selector('#work_position_click_center_right em') for em in emList: cityName = em.text check = em.get_attribute('class') if cityName != '杭州': if check == 'on': em.click() else: if check != 'on': em.click() # 点击确定按钮 sleep(2) driver.find_element_by_id('work_position_click_bottom_save').click() driver.find_element_by_css_selector('div.tit').click() # 在高级搜索页面点击职能类别 driver.find_element_by_id('funtype_click').click() # 在职能页面选择高级开发工程师 driver.find_element_by_id('funtype_click_center_right_list_category_0100_0100').click() driver.find_element_by_id('funtype_click_center_right_list_sub_category_each_0100_0106').click() driver.find_element_by_id('funtype_click_bottom_save').click() # 选择外派欧美 driver.find_element_by_css_selector('#cottype_list span').click() driver.find_element_by_css_selector('#cottype_list span.li[data-value="01"]').click() # 选择工作年限选 1-3 年,点击搜索 driver.find_element_by_id('workyear_list').click() driver.find_element_by_css_selector('#workyear_list span.li[data-value="02"]').click() driver.find_element_by_css_selector('div.p_sou > span.p_but').click() sleep(2) # 打印出搜索出的信息 elList = driver.find_elements_by_css_selector('.dw_table .el') for el in elList: if 'title' in el.get_attribute('class'): continue print(el.text.replace(" ","|")) driver.quit()
Selenium 作业 5
打开 12306 网站 https://kyfw.12306.cn/otn/leftTicket/init
出发城市 填写 ‘南京南’, 到达城市 填写 ‘杭州东’
注意输入城市名前,一定要先点击一下输入框,否则查不到。
而且输入城市名最后要包含一个回车符,否则输入框里面会自动清除
发车时间 选 06:00--12:00
发车日期选当前时间的下一天,也就是日期标签栏的,第二个标签
我们要查找的是所有 二等座还有票的车次,打印出这些有票的车次的信息(这里可以用xpath),结果如下:
G7641
G1505
G7393
G7689
from selenium import webdriver from selenium.webdriver.support.ui import Select driver = webdriver.Chrome(r"d: oolswebdriverschromedriver.exe") driver.implicitly_wait(10) driver.get('https://kyfw.12306.cn/otn/leftTicket/init') fromEle = driver.find_element_by_id('fromStationText') # 为什么这里要点击一下 fromEle.click() fromEle.clear() fromEle.send_keys(u'南京南 ') toEle = driver.find_element_by_id('toStationText') toEle.click() toEle.clear() toEle.send_keys(u'杭州东 ') # 输入开始时间, timeSelect = Select(driver.find_element_by_id('cc_start_time')) timeSelect.select_by_visible_text('06:00--12:00') tomorrow = driver.find_element_by_css_selector('#date_range li:nth-child(2)') # 点击这个,就会搜索车次了 tomorrow.click() # 方法一:用xpath实现获取二等座有票的车次信息 print(' =============================== ') xpath ='//*[@id="queryLeftTable"]//td[4][@class]/../td[1]//a' theTrains = driver.find_elements_by_xpath(xpath) for one in theTrains: print (one.text) # 方法二:用css实现获取二等座有票的车次信息 print(' =============================== ') theTrainLines = driver.find_elements_by_css_selector('#queryLeftTable > tr') # 先不加这个,发现特别慢 driver.implicitly_wait(0) for one in theTrainLines: secondlevelseat = one.find_elements_by_css_selector('td:nth-of-type(4)[class]') if secondlevelseat: print (one.find_element_by_css_selector('td:nth-of-type(1) a').text) driver.implicitly_wait(10) driver.quit()
Selenium 作业 6
-- 作业1
登录华为官网 https://www.vmall.com/,
点击 "华为官网" 和 "更多精彩->应用市场" 两个链接
检查 "华为官网" 页面上是否 有如下主菜单
智能手机
笔记本&平板
穿戴设备
智能家居
更多产品
软件应用
服务与支持
华为商城
检查 "应用市场" 页面上是否 有如下主菜单
首页
游戏
软件
专题
品牌专区
华为软件专区
最后再回到主窗口, 检查鼠标停留在 "笔记本&平板" 处的时候, 是否显示的菜单有
"平板电脑 笔记本电脑 笔记本配件"
怎么模拟鼠标停留事件,请大家自行网上搜索,看看能不能自己解决问题。
-- 作业2
写一个程序实现如下的自动化过程
- 登录 121866.com
- 选择 发广告,
- 输入标题和 一些文本内容
- 选择 插图,在本地目录中选择一张准备好的图片 , 查看是否能够上传图片成功
# coding=utf-8 from selenium import webdriver driver = webdriver.Chrome(r"d: oolswebdriverschromedriver.exe") driver.implicitly_wait(20) driver.get('https://www.vmall.com/') driver.find_element_by_css_selector("div.s-sub a[href*='consumer.huawei']").click() driver.find_element_by_css_selector("div.s-sub a.icon-dropdown").click() driver.find_element_by_css_selector("a[href*='appstore.huawei.com']").click() def checkHuawei(): expected = '智能手机|笔记本&平板|穿戴设备|智能家居|更多产品|软件应用|服务与支持|华为商城' eles = driver.find_elements_by_css_selector(".menu_cn>ul>li") eleTexts = [ele.text for ele in eles] actual = '|'.join(eleTexts) if actual == expected: print('huawei page pass') else: print('huawei page fail!!!!') def checkAppmarket(): expected = u'''首页|游戏|软件|专题|品牌专区|华为软件专区''' eles = driver.find_elements_by_css_selector("ul.ul-nav li") eleTexts = [ele.text for ele in eles] actual = '|'.join(eleTexts) if actual == expected: print('app page pass') else: print('app page fail!!!!') def checkVmall(): expected = u'''平板电脑|笔记本电脑|笔记本配件''' from selenium.webdriver.common.action_chains import ActionChains ac = ActionChains(driver) ac.move_to_element(driver.find_element_by_id('zxnav_1')).perform() eles = driver.find_elements_by_css_selector('#zxnav_1 li.subcate-item') eleTexts = [ele.text for ele in eles] actual = '|'.join(eleTexts) if actual == expected: print('main page pass') else: print('main page fail!!!!') mainWindow = driver.current_window_handle for handle in driver.window_handles: driver.switch_to.window(handle) if '消费者业务官网' in driver.title: checkHuawei() elif '应用市场' in driver.title: checkAppmarket() elif '商城官网' in driver.title: checkVmall() driver.switch_to.window(mainWindow) checkVmall() input(' press to quit...') driver.quit()