又要開篇叨叨
昨天沒有更新扁远,但因?yàn)橄麓笥隂]擼串汽烦,陪孩子玩了下前一天寫的Flask開發(fā)猜數(shù)字小游戲---聰明的奧特曼,發(fā)現(xiàn)代碼有些bug悠反,進(jìn)行了修改坷衍,另外只是名字叫聰明的奧特曼靶瘸,我的倆爺不買賬啊苫亦,沒辦法毛肋,將成功的alert改為展示奧特曼的圖片,才把他倆打發(fā)屋剑。至于做對(duì)润匙?別逗了,我都改成猜1-4了都各種錯(cuò)饼丘,就急著點(diǎn)完了看奧特曼趁桃,真是氣死我了.....
今天講什么
講什么標(biāo)題說了,講selenium的單選肄鸽、多選卫病、下拉框選項(xiàng)定位。但其實(shí)這東西典徘,沒什么太多說的蟀苛,又比較枯燥,那該怎么讓這一集selenium的課程變得有趣呢逮诲?有請(qǐng)老中醫(yī)帜平,哈哈....
怎么樣,這個(gè)野廣告做的還不錯(cuò)吧梅鹦,你們給多少分裆甩?至于為什么要自己寫一個(gè)html的頁面,一是懶得找什么網(wǎng)頁又有下來框體齐唆,又有單/多選嗤栓。二是最近更多的想練習(xí)寫一些web界面,最重要的是怕大家覺得selenium系列的文章沒意思箍邮,所以搞點(diǎn)噱頭唄茉帅。哈哈....
頁面實(shí)現(xiàn)起來比較簡(jiǎn)單,樣式用Bootstrap即可锭弊,至于這個(gè)城中村經(jīng)典廣告牌堪澎,只要簡(jiǎn)單的使用jQuery添加和刪除css樣式就OK了。
代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>老中醫(yī)</title>
<link rel="stylesheet">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<style type="text/css">
body {
height: 500px;
}
.container {
max-width: 500px;
height: 450px;
border: 2px solid grey;
border-radius: 5px;
}
.ad {
text-align: center;
font-size: 25px;
background-color: black;
color: red;
margin-bottom: 20px;
}
.chuibi {
display: inline-block;
}
.adplus {
color: black;
}
.footer {
text-align: center;
}
</style>
</head>
<body>
<form class="container">
<div class="row">
<div class="ad ">祖?zhèn)髂锌评现嗅t(yī)
<div class="small chuibi"> 【華佗在世味滞,扁鵲轉(zhuǎn)生】
</div>
</div>
</div>
<div class="form-group ">
<div class="input-group">
<div class="input-group-addon">
姓名:
</div>
<input id='name' class="form-control" />
</div>
</div>
<div class="form-group ">
<div class="input-group">
<div class="input-group-addon">
性別:
</div>
<select id="sex" class="form-control">
<option value="女">女</option>
<option value="男">男</option>
</select>
</div>
</div>
<div class="form-group has-success">
<div><label class="control-label">如何了解我院:</label></div>
<label class="radio-inline">
<input type="radio" name="access" id="inlineRadio2" value="朋友介紹"> 朋友介紹
</label>
<label class="radio-inline">
<input type="radio" name="access" id="inlineRadio1" value="野廣告">野廣告
</label>
</div>
<div class="form-group has-error">
<div><label class="control-label">有哪些病癥:</label></div>
<div class="checkbox">
<label>
<input type="checkbox" value="全身乏力">
全身乏力
</label>
</div>
<div class="checkbox ">
<label>
<input type="checkbox" value="食欲不振">
食欲不振
</label>
</div>
<div class="checkbox ">
<label>
<input type="checkbox" value="腰膝酸軟">
腰膝酸軟
</label>
</div>
<div class="checkbox ">
<label>
<input type="checkbox" value="失眠多夢(mèng)">
失眠多夢(mèng)
</label>
</div>
</div>
<div class="form-group">
<div><label class="control-label">簡(jiǎn)要描述你的病情:</label></div>
<input id='summary' class="form-control" type="text">
</div>
</form>
<div class="footer">
?2019-清風(fēng)Python:<a href="http://www.reibang.com/u/d23fd5012bed">聯(lián)系我們</a>
</div>
<script>
setInterval(function() {
var title = $('.ad')
if (title.hasClass('adplus')) {
title.removeClass('adplus')
} else { $('.ad').addClass('adplus') }
}, 600);
</script>
</body>
</html>
入主題
先來說說下拉框吧樱蛤,網(wǎng)上很多的帖子說下拉框的選擇必須要先定位到下拉框體,然后點(diǎn)擊框體剑鞍,才能獲取選項(xiàng)并選中昨凡,其實(shí)不然。90%的下拉框都會(huì)提前將option內(nèi)容保存在html中攒暇,只有極少情況時(shí)通過AJAX請(qǐng)求的(這種情況之后的課程說....)土匀。所以針對(duì)這種選項(xiàng)類的使用,推薦使用xpath和css_selector去定位形用。因?yàn)榭勺兏怕瘦^小....
至于單選和多選就轧,主要是通過driver.find_elements_by_tag_name('input')
证杭,然后進(jìn)行批量循環(huán)判斷input選項(xiàng)完成選擇。
說了這么多妒御,不如直接看代碼來的直觀:
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清風(fēng)Python
# @Date : 2019/6/22 22:04
# @Software : PyCharm
# @version :Python 3.7.3
# @File : Day_3.1_select.py
from selenium import webdriver
import time
# 本地文件解愤,根據(jù)你們的位置,自行修改
URL = 'file:///D:/Codes_Repository/Python/SeleniumTest/Day4_selenium定位下拉框/index.html'
options = webdriver.ChromeOptions()
# 調(diào)整窗口大小乎莉,主要是為了使減小gif文件大小送讲,方便截圖上傳
options.add_argument('window-size=650,650')
options.add_argument('disable-infobars')
driver = webdriver.Chrome(options=options)
driver.get(URL)
driver.find_element_by_id('name').send_keys("隔壁老王")
time.sleep(1)
sex = driver.find_element_by_id('sex')
sex.find_element_by_css_selector("[value='男']").click()
# driver.find_element_by_xpath('//*[@id="sex"]/option[2]').click()
time.sleep(1)
input_tags = driver.find_elements_by_tag_name('input')
for input_tag in input_tags:
if input_tag.get_attribute('type') == 'radio' and input_tag.get_attribute('value') == '野廣告':
input_tag.click()
time.sleep(1)
input_tags = driver.find_elements_by_tag_name('input')
for input_tag in input_tags:
if input_tag.get_attribute('type') == 'checkbox' and input_tag.get_attribute('value') != '腰膝酸軟':
input_tag.click()
time.sleep(2)
driver.close()
看下隔壁老王前來就診的效果:
由于頁面只有一組單選和多選,所以無需多做判斷惋啃,但如果網(wǎng)頁上存在多組的單選和多選哼鬓。那還需要針對(duì)他們自身的特性進(jìn)行分析,知識(shí)是死的边灭,要學(xué)會(huì)靈活運(yùn)用才行....
To Be Continue
今天的內(nèi)容就到這里异希,如果覺得有幫助,歡迎將文章或者我的公眾號(hào)【清風(fēng)Python】
分享給更多喜歡python的人