Python学习--Selenium模块学习(2)

Selenium的基本操作

获取浏览器驱动寻找方式

1. 通过手动指定浏览器驱动路径
2. 通过 `$PATH`环境变量找寻浏览器驱动

可参考Python学习--Selenium模块简单介绍(1)

控制浏览器访问URL

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

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 = 60start_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()

原文地址:https://www.cnblogs.com/ftl1012/p/10327685.html

时间: 2024-10-24 21:48:21

Python学习--Selenium模块学习(2)的相关文章

Python学习--Selenium模块

1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台 原文地址:https://www.cnblogs.com/ftl1012/p/seleniumAll.html

python之web模块学习-- urllib

准备写一些列的 python之web模块学习,基本上涉及常用的的web模块,包括 urllib.urllib2.httplib.urlparse.requests,现在,开始我们的第一个模块的学习吧. 1  urllib简介 python urllib 模块提供了一个从指定的URL地址获取网页数据,然后对其进行分析处理,获取我们想要的数据. 2  常用方法 2.1  urlopen  -- 创建一个类文件对象 为读取指定的URL help(urllib.urlopen) urlopen(url,

python之web模块学习-- urllib2

下面继续学习python的web模块 ---  urllib2,一个源于urllib又高于urllib的模块. 1  urllib2 简介 urllib2是python自带的一个访问网页及本地文件的库. 与urllib相比,显著区别之处在于: 1) urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL.这意味着,用urllib时不可以伪装User Agent字符串等. 2) urllib提供urlencode方法用来encode发送的da

python之web模块学习-- urlparse

继续学习python的web模块,urlparse 是一个比较简单的模块,主要是用来 解析URL字符串的 1  urlparse简介 python使用urlparse来解析URL字符串 主要方法: urlprase 次要方法: urljoin urlsplit  urlunsplit等 2  urlparse详解 urlparse模块主要是把url拆分为6部分,并返回元组.并且可以把拆分后的部分再组成一个url.主要有函数有urljoin.urlsplit.urlunsplit.urlparse

Python随机数random模块学习,并实现生成6位验证码

一.前言 学习python随机数random模块的使用 ,并使用模块中的函数,实现6位验证码生成 二.random模块 1.random.random() 返回0-1直接的随机数,类型为float >>>print(random.random()) 0.1259184691662908 2.random.randint(1, 8) 返回1-8直接的随机数,包括8 >>>print(random.randint(1, 8)) 3 3.random.choice() 从一个

[ python编程 ] subprocess模块学习总结

转载:http://www.jb51.net/article/48086.htm 从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息. 一.subprocess以及常用的封装函数    运行python的时候,我们都是在创建并

Python的hashlib模块学习

python的hashlib模块提供一些常用的加密功能 例如获取字符串'Nobody inspects the spammish repetition'的MD5校验值 In [48]: import hashlib In [49]: m=hashlib.md5() In [50]: m.update('Nobody inspects') In [51]: m.update('the spammish repetition') In [52]: m.digest() Out[52]: '%\x8d

Python re正则表达式模块学习【转】

感谢原作者,本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 博主还有一些比较好的python文档在此一并推荐,可以移步查看. 文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whate

day5模块学习 -- os模块学习

python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小-- 另外,os模块不受平台限制,也就是说:当我们要在linux中显示当前命令时就要用到pwd命令,而Windows中cmd命令行下就要用到这个,额...我擦,我还真不知道,(甭管怎么着,肯定不是pwd),这时候我们使用python中os模块的os.path.abspath