Selenium的基本操作

获取浏览器驱动寻找方式

1. 通过手动指定浏览器驱动路径

2. 通过 `$PATH`环境变量找寻浏览器驱动

控制浏览器访问URL

find系列函数定位元素

- `find_element_by_xxx` 返回第一个符合条件 `WebElement`

- `find_elements_by_xxx` 返回符合条件所有元素包含了`WebEelemnt`列表

- `find`函数系列说明

- `find_element_by_class_name` 通过class 查询元素

- `find_element_by_id` 通过 ID

- `find_element_by_name` 通过name

- `find_element_by_tag_name` 通过标签名称

- `find_element_by_css_selector` css样式选择

- `find_element_by_link_text` 通过链接内容查找

- `find_element_by_partial_link_text` 通过链接内容包含的内容查找,模糊查询

- `find_element_by_xpath` 通过 xpath 查找数据

获取元素属性和文本内容

# 获取属性

element.get_attribute('属性名')

# 获取文本内容

element.text

输入框输入内容

input_element.send_keys('博客园')

自动百度查找博客园

import time

# 1. 导入模块

from selenium import webdriver

# 2. 创建浏览器对象,

browser = webdriver.Chrome() # 参数驱动路径,默认参数也是当前路径的chromedriver驱动

# 3. 输入网址

browser.get("https://www.baidu.com/")

timeout = 60

start_time = time.time()

while True:

try:

time.sleep(0.1) # 兼顾其他程序使用CPU资源

# 4. 找到输入框,输入关键词

input_element = browser.find_element_by_id('kw')

input_element.send_keys("小a玖拾柒-博客园") # 查询博客园

# 5. 找到“百度一下”的按钮,点击一下按钮

button = browser.find_element_by_id('su')

button.click()

time.sleep(3) # 让网页加载完成

# 6. 找到作者的博客园链接

url_element = browser.find_element_by_link_text("小a玖拾柒 - 博客园")

url_element.click()

break

except Exception as e:

if time.time() > start_time: # 超时

print(e)

break

# 退出浏览器

time.sleep(3)

browser.quit()

查看百度首页的链接(获取元素是文本内容和元素属性)

import time

# 1. 导入模块

from selenium import webdriver

# 2. 创建浏览器对象,

browser = webdriver.Chrome() # 参数驱动路径,默认参数也是当前路径的chromedriver驱动

# 3. 输入网址

browser.get("https://www.baidu.com/")

baidu_list = browser.find_elements_by_class_name("mnav")

for item in baidu_list:

# 获取元素是文本内容和元素属性

print("{0}:{1}".format(item.text, item.get_attribute("href")))

# 退出浏览器

time.sleep(5)

browser.quit()

扩展:Selenium的自动等待方式

当控制浏览器时,浏览器正在加载页面同时又去获取数据导致浏览器寻找不到需要操作的元素引发异常。

- 方式一:强制等待,浪费时间

import time

time.sleep(秒数)

- 方式二:隐性等待,缺点:无法控制 AJAX请求

browser.implicitly_wait(等待时间)

- 方式三:显性等待,每个元素都可以自己定义检查条件

手动编写:

timeout = 60

start_time = time.time()

while True:

try:

time.sleep(0.1) # 兼顾其他程序使用CPU资源

# 4. 找到输入框,输入关键词

input_element = browser.find_element_by_id('kw')

input_element.send_keys("小a玖拾柒-博客园") # 查询博客园

# 5. 找到“百度一下”的按钮,点击一下按钮

button = browser.find_element_by_id('su')

button.click()

time.sleep(3) # 让网页加载完成

# 6. 找到作者的博客园链接

url_element = browser.find_element_by_link_text("小a玖拾柒 - 博客园")

url_element.click()

break

except Exception as e:

if time.time() > start_time: # 超时

print(e)

break

Selenium提供:

# 导入显性等待的API需要的模块

# 1> 等待对象模块

from selenium.webdriver.support.wait import WebDriverWait

# 2> 导入等待条件模块

from selenium.webdriver.support import expected_conditions as EC

# 3> 导入查询元素模块

from selenium.webdriver.common.by import By

# 使用selenium api 实现显性等待

# 1> 创建等待对象

# 参数一 浏览器对象

# 参数二 超时时间

# 参数三 检查元素时间间隔

wait = WebDriverWait(browser,60,0.1)

# presence_of_element_located 检查元素是否存在,参数是一个元祖,元祖内部描述等待元素查询方案

# visibility_of_element_located 检查元素是否可见

url_element= wait.until(EC.presence_of_element_located((By.CLASS_NAME,"favurl")))

url_element.click()

python的selenium模块博客园_Python学习--Selenium模块学习(2)相关推荐

  1. python中json模块博客园_python的json模块

    python的json模块 什么是序列化和反序列化? 序列化 在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输.序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写 ...

  2. python中json模块博客园_Python中的Json模块详解

    Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...

  3. python之路 mysql 博客园_Python之路(二十七):Mysql(下)

    本结目录 数据库操作 数据表操作 外键约束 多表查询 索引 事务 python连接Mysql 数据库操作 此操作针对windows环境下 该操作再Mysql服务器启动以及客户端连接之后 对数据库操作之 ...

  4. python实现计算器代码 博客园_python实现计算器

    python实现计算器 1.题目描述 实现一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算 1.1输入 ...

  5. python tkinter详解 博客园_python tkinter-布局

    包装布局pack() 目前对它的感觉是,当一个窗体的对象都设置完属性后,最后用它来绑定到窗体上.之后就不能再设置属性了 名称 描述 取值范围 expand 当值为"yes"时,si ...

  6. python之路 mysql 博客园_python之路--MySQL数据库初识

    一 . MySQL安装 #下载MySQL地址 https://dev.mysql.com/downloads#要选稳定的,不要选最新的,稳定的就是半年以上没有出现过bug 现在5.6.43为绝大多数使 ...

  7. python博客园_python模拟博客园登录-基础版

    mport time import inspect from functools import wraps user_status = {'username': None,'status': Fals ...

  8. python 装饰器写博客园

    需求 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序 2),用户输入选项,3~6 ...

  9. 博客园是一个不错的学习交流的网站

    通过一篇Oracle 12c rac搭建的文章,以及搭建过程出现了一些问题,觉得博客园挺好用,挺干净的.比csdn.以后就用博客园学习了. 转载于:https://www.cnblogs.com/cu ...

最新文章

  1. (转)Spring读书笔记-----Spring的Bean之Bean的基本概念
  2. android 如何解决scrollTo无法执行
  3. 全国高等学校计算机等级用处,全国计算机等级考试一级有什么用
  4. 响应式网页设计简单入门
  5. ribbon hystrix仪表盘
  6. Python中的可变与不可变对象
  7. [*C*]将整数转化为十进制字符串的函数Convert integer to Decimal string
  8. screen 命令使用及示例
  9. Java程序员须知的七个日志管理工具
  10. android camera预览帧,android camera2处理每一帧并显示其预览
  11. 【Autoware自动驾驶-开源项目实践】大家快来入门体验啦
  12. 计算机常见故障判断方法,电脑故障判断-计算机常见故障判断方法
  13. [日常]wps插入页眉页脚
  14. pandoc html 模板,Pandoc使用技巧
  15. 如何恢复删除好友的微信聊天记录?iPhone手机高效操作方法
  16. 《所谓高情商,就是会说话》思维导图精华分享
  17. 亚马逊影响者红人,用关联视频给卖家带来哪些好处?
  18. Session.AUTO_ACKNOWLEDGE
  19. ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理) - (转载)
  20. mysql 报错 1054 - Unknown column ‘box_inf.box_number‘ in ‘where clause‘

热门文章

  1. 从CTO到创始人 孙元浩基础软件破局之路
  2. 数据结构与算法 第二次实验报告堆栈队列
  3. ubuntu14 安装JDK
  4. 数据泄露 安全狗捍卫服务器安全
  5. Android之旅---Service
  6. 基于linuxunix高性能web服务器架构思路分析
  7. CCN:拥有雄厚实力的BCH将成为下一轮牛市的催化剂
  8. BCH DEVCON 黑客马拉松即将登陆旧金山!
  9. 比特币Cash Hard Fork辩论在压力测试后重新召开
  10. spring@PropertySource用法