Python学习--Selenium模块学习
Posted 小a玖拾柒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习--Selenium模块学习相关的知识,希望对你有一定的参考价值。
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 = 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分辨出可访问的网页并获取网页内容
selenium + python自动化测试unittest框架学习python导入模块及包知识点