先导:使用pycharm编写selenium代码环境准备:
1)导入webdriver模块 from selenium import webdriver
2)关联驱动
2-1 先去官网下载使用浏览器对应的驱动
chromedriver.exe,下载好的驱动不需要运行驱动,在py文件中指定驱动位置
driver=webdriver.Chrome(r’C:\all_workpace\tools_zdh\chromedriver.exe’)
3)把chromedriver.exe所在文件的路径加入到环境变量path中,注意:只是路径('C:\all_workpace\tools_zdh\)
1.通过driver.find_element_by_id()选择元素
( 启用驱动,使用该测试的网页打开控制台(F12),使用定位箭头查到被测试元素中的id,id是唯一的)
源代码:<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
ele=driver.find_element_by_id('kw') #通过id寻找元素
#该操作也会返回一个对象,在webdriver中叫webelement,ele变量来接收它
#ele就是该输入框元素
ele.send_keys('chromewebdriver') #在输入框中输入内容
btn=driver.find_element_by_id('su') #在输入框中输入内容后,点击【百度一下】,这个元素的id是su
btn.click()
time.sleep(3) #等网页加载,打开网页(我要用驱动去操作浏览器)
延伸1:对查询的内容做处理
if 'ChromeDriver Mirror' in res.text: #比较该内容是否在该元素里用text属性
print('success')
#print(h3.text)
else:
print('fail')
print(res.text)
driver.quit() #退出浏览器
延伸2:通过id选择元素2种写法:
写法一
ele=driver.find_element_by_id(‘kw’)
写法二
from selenium.webdriver.common.by import By
ele1=driver.find_element(by=By.ID,value='kw') #参数是(通过by=By.属性名,value=属性值)
延伸3:元素的单数和复数
1)单数: 找不到元素就抛出异常
find_name=driver.find_element_by_name(‘tj_trnews’)
ele=driver.find_element_by_id(‘kw’)
只返回显示匹配的第一个元素
2)复数:
find_name=driver.find_elements_by_name(‘tj_trnews’)
ele=driver.find_elements_by_id(‘kw’)
返回显示匹配的所有元素,
复数的特点:
①输出值为一个列表,要print的话,用for循环遍历打印
②如果找不到,返回空列表,不抛出异常
③find元素的方法都有单复数的方式
(复数举例见下方river.find_element_by_class_name(‘mnav’)选择元素)
2.通过driver.find_element_by_name()选择元素(name属性的值)
——不建议用该方法,因为name容易重复
源代码:<a href="http://www.baidu.com/more/" name="tj_briicon" class="s_bri" target="_blank"> 更多产品</a>
find_name=driver.find_element_by_name(‘tj_briicon’) #更多产品
print(find_name.text)
3.通过driver.find_element_by_class_name(‘mnav’)选择元素(class属性的值)
源代码:<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>
单数方式:
find_class=driver.find_element_by_class_name('mnav')
print(find_class.text) #新闻
复数方式:
源代码:<div id="u_sp" class="s-isindex-wrap s-sp-menu"> <a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a> <a href="https://www.hao123.com" target="_blank" class="mnav">hao123</a> <a href="http://map.baidu.com" target="_blank" class="mnav">地图</a> <a href="http://v.baidu.com" target="_blank" class="mnav">视频</a> <a href="http://tieba.baidu.com" target="_blank" class="mnav">贴吧</a> <a href="http://xueshu.baidu.com" target="_blank" class="mnav">学术</a></div>
find_names=driver.find_elements_by_class_name('mnav')
for one in find_names:
print(one.text)
新闻
hao123
地图
视频
贴吧
学术
4.通过driver.find_element_by_tag_name()选择元素
tag名如果是唯一的,可以根据tag名定位
源代码:<button name="button">按钮2</button>
ele=driver.find_element_by_tag_name('button')
print(ele.text) #按钮2
5.通过driver.find_element_by_link_text()选择元素
注意:参数写的是该链接的文本
driver.find_element_by_link_text('新闻').click() #完整的超链接文本
driver.find_element_by_partial_link_text('新').click() #输入不完整的超链接文本
6.get_attribute(),获取元素的属性值,并打印出来
源代码:<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>
find_link=driver.find_element_by_link_text('新闻')
print(find_link.get_attribute('href')) #http://news.baidu.com/
find_link=driver.find_element_by_class_name('target')
print(find_link.get_attribute('href')) #‘_blank’
7.获取元素标签中html的片段(源代码)
源代码:<div id="u_sp" class="s-isindex-wrap s-sp-menu"> <a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a> <a href="https://www.hao123.com" target="_blank" class="mnav">hao123</a> <a href="http://map.baidu.com" target="_blank" class="mnav">地图</a> <a href="http://v.baidu.com" target="_blank" class="mnav">视频</a> <a href="http://tieba.baidu.com" target="_blank" class="mnav">贴吧</a> <a href="http://xueshu.baidu.com" target="_blank" class="mnav">学术</a></div>
find_innerHTML=driver.find_element_by_id('u_sp')
print(find_innerHTML.get_attribute('innerHTML'))
#输出的片段代码不包括该上级标签(源代码中不包括`<div></div>`)
print(find_innerHTML.get_attribute('outerHTML'))
#输出的片段代码包括该上级标签(和源代码相同)
8.通过上层元素找子元素
找的该元素没有id标签,只有name和class等,确保正确性,先找该元素上一级含有id 的上级元素
```javascript
<div id="u1">
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
<a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
ele_id=driver.find_element_by_id('u1') #先找上级元素
ele_id_name=ele_id.find_element_by_name('tj_trnews') #再找目标元素
print(ele_id_name.text) #再操作目标元素
print(ele_id_name.get_attribute('class')) #再操作目标元素
9.使用driver.find_element_by_css_selector()定位和操作元素
见另外章节单独总结
10.使用driver.find_element_by_xpath()定位和操作元素
见另外章节单独总结
**
注:该文档是个人学习总结笔记,仅供参考
**