11月5日

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:\tools\webdrivers\chromedriver.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') div同时class为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:\tools\webdrivers\chromedriver.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 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()

子元素(child)选择器

选择元素的子元素,

  和后代选择器不同:#choose_car  option;  option不一定是子元素

  比如 #choose_car > option      footer > p;  >必须是直接子元素

  可以是很多级:ul > ol > li > em

组(group)选择

组选择同时选择多个元素,逗号隔开 语法: <s1>,<s2>

比如 p,button       #food, .cheese

组合使用

  选择id为food的的所有span子元素和所有的p(包括非food的子元素) #food > span,p  组选择的优先级最低

  选择id为food的的所有span子元素和所有的p子元素 #food > span, #food  > p

  选择id为food的的所有子元素 #food > *

兄弟节点选择

  选择紧接在另一个元素后的元素,二者有相同的父元素,比如 #food + div ; #many > div > p.special + p   紧接着后面的兄弟节点

  选择在另一个元素后的元素,二者有相同的父元素,比如 #food ~ div,所有的兄弟节点

属性选择器

可以根据元素的属性及属性值来选择元素

  比如

  *[style]

  p[spec=len2]

  p[spec='len2 len3']   中间有空格,所以加引号;没有空格,可加可不加

  p[spec*='len2']   #包含

  p[spec^='len2']  #开头  结尾

  p[span$='len2']

  p[class=special][name=p1]    同时满足两种属性

http://www.w3school.com.cn/cssref/css_selectors.asp

p:nth-child(2)           选择属于其父元素的第二个子元素的每个 <p> 元素

p:nth-last-child(2)    同上,从最后一个子元素开始计数。

p:nth-of-type(2)       选择属于其父元素第二个 <p> 元素的每个 <p> 元素

p:nth-last-of-type(2)  同上,但是从最后一个子元素开始计数

验证CSS选择器,点击elements,按ctrl +F 

element 标签内查找      #choose_car option[value='volvo']

console内   精准的css表达式  $$("choose_car option[value='volvo']")

编辑框的一些操作

用clear方法清除该元素里面字符串 input1.clear()

获取input元素里面输入的文本内容 input1.get_attribute('value')

单选框

对应的html

<input type="radio" name="gender" value="male"> 男<br>

<input type="radio" name="gender" value="female"> 女<br>

click方法选择

input1 = driver.find_element(By.CSS_SELECTOR,"input[value=male]")

input.click()

不管是原来该元素是否选中,直接去点击该元素没有问题,都可以确保该单选框选中

勾选框

对应的html

<input type="checkbox" name="vehicle" value = "bike"> 我有一辆自行车

<input type="checkbox" name="vehicle" value = "car"  checked> 我有一辆汽车

click方法选择

is_selected 方法来获取选择的状态

input1 = driver.find_element(By.CSS_SELECTOR,"input[value=car]")

selected = input1_is_selected()

if selected:

  print ('car already selected')

else:

  print('car not selected,click on it')

  input1.click()

复选框

对应的html

<select multiple>

  <option value='benz'>奔驰S300</option>

  <option value='accord'>雅阁</option>

</select>

<select>

  <option value="male">男</option>

  <option value="female" selected="selected">女</option>

select类

方法deselect_all

方法select_by_visible_text

# coding=utf-8

from selenium import webdriver
driver = webdriver.Chrome(r"d:\tools\webdrivers\chromedriver.exe")
driver.get('file:///D:/gsync/workspace/sq/selenium/samples_selenium/wd/lesson04/ms.html') # 打开网址

# 导入 Select

from selenium.webdriver.support.ui import Select

# 获得相应的WebElement

select = Select(driver.find_element_by_id("multi"))

# 先去选择所有的 选项

select.deselect_all()

select.select_by_visible_text("雅阁")

select.select_by_visible_text("宝马 740")
# 获得相应的WebElement

select = Select(driver.find_element_by_id("single"))

select.select_by_visible_text("男")
input('press any key to quit...')

driver.quit()

# 浏览器退出

选择、操作web元素-3的更多相关文章

  1. 选择、操作web元素-2

    11月3日 等待web元素的出现 例子:百度搜索松勤网,点击操作后不等待页面刷新,下面选择页面元素的时候,该元素还是未出现 sleep方案的弊病:固定的等待时间,导致测试用例执行时间很长 为什么cli ...

  2. 选择、操作web元素

    11月1日 什么是web元素 Selenium自动化主要就是:选择界面元素,操作界面元素(输入操作:点击.输入文字.拖拽等,输出操作:获取元素的各种属性),根据界面上获取的数据进行分析和处理 选择元素 ...

  3. Xpath选择、操作web元素

    11月6日 xpath选择 XPath(XML Path Language)是W3C(World Wide Web Consortium)定义的用来在XML文档中选择节点的语言, 主浏览器也支持XPa ...

  4. Web自动化 - 选择操作元素 1

    文章转自 白月黑羽教Python 所有的 UI (用户界面)操作 的自动化,都需要选择界面元素. 选择界面元素就是:先让程序能找到你要操作的界面元素. 先找到元素,才能操作元素. 选择元素的方法 程序 ...

  5. Web自动化 - 选择操作元素 2

    文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...

  6. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  7. selenium怎么操作web页面常见的元素

    总结一下selenium怎么操作web页面常见的元素. 主要有: 上传 alter dialog prompt dialog confirm dialog select list radio box ...

  8. Appium之选择/操作元素

    Appium是如何选择.操作元素的呢? appium自动化  ------  选择界面 元素 操作元素  ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...

  9. Selenium Web元素操作

    我们定位到Web页面元素之后,可以对元素进行一系列的操作,实现跟页面的交互.包括点击.文本输入.元素属性获取等.常用的方法列举如下: 方法 描述 click() 点击元素 send_keys(**va ...

随机推荐

  1. springboot工程添加404页面

    首先在/src/main/resources下创建文件夹/public/error 在文件夹里创建html页面,jsp页面不可以. <html> <body> <img ...

  2. Aysnc的异步执行的线程池

    ProxyAsyncConfiguration.java源码: @Configuration @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public clas ...

  3. Python:员工信息增删改查

    一:需求 homework.txt文件中有如下格式的人员信息: 1,Jack Wang,28,13451024608,HR,2015‐01‐072,Rain Wang,21,13451054608,I ...

  4. typescript静态属性,静态方法,抽象类,多态

    /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...

  5. 00014 - linux中用top、ps命令查看进程中的线程

    在Linux上显示某个进程的线程的几种方式. 方法一:PS 在ps命令中,“-T”选项可以开启线程查看.下面的命令列出了由进程号为<pid>的进程创建的所有线程. 1.$ ps -T -p ...

  6. java.util.stream 库简介

    Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...

  7. linux驱动开发—基于Device tree机制的驱动编写

    前言Device Tree是一种用来描述硬件的数据结构,类似板级描述语言,起源于OpenFirmware(OF).在目前广泛使用的Linux kernel 2.6.x版本中,对于不同平台.不同硬件,往 ...

  8. Android短信收发(二)

    接收SMS类,代码如下 //for receive SMS private SmsReceiver mSmsReceiver; @Override protected void onResume() ...

  9. Don't afraid point

    int p; int *p; int p[3]; int *p[3];分析方式:首先从P开始分析,先与[]结合因为其优先级比*高,所以p是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与 ...

  10. 小朋友学C语言(3):整数、浮点数、字符

    C语言的数据类型有整型.浮点型(就是小数).字符.字符串.数组.结构体等.刚开始学的时候,不要一下子学太多.先学最基本的整型.浮点型和字符. 对于学习程序来说,最重要的是动手操作. 先编写程序: #i ...