准备
使用 pip install selenium 下载包
在程序中进行调用
# 导入 selenium 下的 webdriver(网页内驱动模块) from selenium import webdriver
from selenium import webdriver
Selenium WebDriver提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。
下载对应浏览器版本的driver并添加环境变量
操作网页元素
创建一个进程,获取网页
brower = webdriver.Chrome() # 支持多种浏览器,这里已谷歌举例
brower.get("https://xxx.xx.xx/")
元素定位,IDE可以直接展示出来:
元素定位可以使用chrome或者firefox进行元素copy,根据元素的类型进行选择
brower.find_element_by_name("username").send_keys("uxxx") #输入框
brower.find_element_by_class_name("submitBtn").click() # 按钮点击
brower.find_element_by_css_selector("#ul_others > li:nth-child(2) > span").click() # 链接点击
页面控制切换
有时候我们的网页是打开新窗口的方式进行展示的,这时候,我们需要切换页面操作,可以使用switch_to.window()
我们要先获取控制器上所有的页面的句柄
pages = brower.window_handles
print(pages) # 一个列表
brower.switch_to.window(pages[1]) #取值切换到第二个打开的窗口
之后再使用brower就是在新页面操作了
显示等待
网页元素加载与网络和性能有很大的关系,我们不能单纯的依靠time.sleep来进行数据等待,这样太消耗时间;
selenium有四种等待方式,这里只介绍一下显示等待:
表格引用至 (https://www.gaoyaxuan.net/blog/18.html)
等待的条件 | WebDrive的方法 |
页面元素是否在页面上可用和可被单击 | elementToBeClickable(By locator) |
页面元素处于被选中状态 | elementToBeSelected(WebElement elelment) |
页面元素在页面上是否存在 | presenceOfElementLocated(By locator) |
页面元素是否包特定文本 | textToBePresentInElement(By locator) |
页面元素值 | textToBePresentInElementValue(By locator,java.lang.String text) |
标题 | titleContains(java.lang.String tilte) |
我们可以设置平均请求时间和最长等待时间,这里需要引用By、until以及expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
select_css = (By.CSS_SELECTOR, "#folders > li:nth-child(16)") # 获取元素信息
WebDriverWait(brower, 20, 0.5).until(EC.presence_of_element_located(select_css))
# 设置等待最长时间20s,每0.5s请求一次 until函数去检查这个元素是否可用
ES后面可以跟的检查方式如下,可根据实际情况进行调整:
注意:
1.谷歌的chromedriver版本要和浏览器版本一致,不然会出现多余的句柄,导致窗口选择出现混乱