Selenium—web元素的操作
web元素的基本操作
获取元素
-
获取元素,赋值变量
-
inputbox = driver.find_element_by_id("kw")
-
-
获取元素文本信息
-
driver.find_element_by_css_selector('[href="http://news.baidu.com"]').text
-
-
获取元素属性值
-
driver.find_element_by_css_selector('[href="http://news.baidu.com"]').get_attribute("class"))
-
- 获取多个元素
操作元素
-
点击
- 单击:.click()
- 双击:.double_click()
- 右键:.context_click()
-
编辑框输入信息
-
.send_keys()
-
-
清除文本
-
.clear()
-
等待元素
- 强制等待
- time.sleep()
- 单位:s
- 强制代码停止运行,在selenium中不够智能;如果设置的时间短,元素还没加载出来,会导致报错;如果设置时间过长,会影响代码的执行效率
- 显式等待
- WebDriverWait().until()
- 单位:s
- 在设置的时间内,每0.5s查看该元素是否可见,如果可见,则终止等待;如果不可见则继续等待,直至超时报错
- 隐式等待
- implicitly_wait()
- 单位:s
- 在设置后所有的元素定位都会等待给定的时间,直到元素出现为止,在设置的时间内元素没出现就会报错
- 隐式等待是一个全局设置,如果后面的需要更改等待时间,则还需要重新设置
实例:
- 使用selenium,打开chrome,输入网址:https://baidu.com
- 查看新闻的文本信息
- 输入框内输入selenium python,点击搜索按钮,打印出所有的搜索信息
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 隐式等待 # 该方法为全局设置,设置后,以下所有的find方法都会预等10s,直至元素出现 driver.implicitly_wait(10) # 定位百度输入框元素 inputbox = driver.find_element_by_id("kw") # 定位右上角的 新闻 元素 news = driver.find_element_by_css_selector('[href="http://news.baidu.com"]') # 显式等待,并将该元素赋值给 button button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "su")) ) # WebDriverWait中参数解析: # WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None) # driver:驱动浏览器---【driver = webdriver.Chrome()】 # timeout:设置的最长等待时间 # poll_frequency:检测的时间间隔,即每0.5s查询一次元素,默认为0.5s,可缺省 # ignored_exceptions:超时后的报错信息,默认为NoSuchElementException # 获取 news 的文本信息 print("新闻链接的文本信息为:",news.text) # 使用get_attribute方法获取新闻链接的class属性值 print("新闻链接的class属性值为:",news.get_attribute("class")) print('\n******************分割******************\n') # 百度输入框内输入 selenium inputbox.send_keys("selenium") # 强制等待1s time.sleep(1) # 清除输入框内容 inputbox.clear() # 百度输入框内输入 selenium python inputbox.send_keys("selenium python") # 点击百度一下按钮 button.click() # 获取查询结果中,所有的 //div//h3/a 元素信息 # 百度搜索中,很多查询结果带有广告信息,虽然界面可以插件来屏蔽,但是元素信息仍然存在! # 通过非广告信息与广告信息的元素对比,得知,广告元素中存在 data-landurl 属性,该属性值为链接形式 # 通过 not(contains(@data-landurl,'http')) 筛选出,不包含 data-landurl 属性值存在 http 的元素 texts = driver.find_elements_by_xpath("//div//h3/a[not(contains(@data-landurl,'http'))]") # 使用for循环,列出每个元素的text属性 for one in texts: print(one.text) driver.quit()
输出结果如下:
新闻链接的文本信息为: 新闻 新闻链接的class属性值为: mnav ******************分割****************** python爬虫从入门到放弃(八)之 Selenium库的使用 - python修行路 ... Selenium+Python学习之一 - 避雨亭 - 博客园 Selenium(Python web测试工具)基本用法详解_python_脚本之家 python bindings for selenium webdriver - selenium · PyPI Selenium with Python — Selenium Python Bindings 2 ... Selenium自动化测试入门(基于Python) - baby_hua的专栏 - CSDN博客 Selenium with Python — Selenium Python Bindings 2 ... Python 爬虫基础Selenium库的使用(二十二01) - 凯耐的博客 - CSDN... 2. 快速入门 — Selenium-Python中文文档 2 documentation selenium+python自动化测试系列(一):登录_慕课手记