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
    • 在设置后所有的元素定位都会等待给定的时间,直到元素出现为止,在设置的时间内元素没出现就会报错
    • 隐式等待是一个全局设置,如果后面的需要更改等待时间,则还需要重新设置

 实例:

  1. 使用selenium,打开chrome,输入网址:https://baidu.com
  2. 查看新闻的文本信息
  3. 输入框内输入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自动化测试系列(一):登录_慕课手记

 

 

posted @ 2019-05-28 10:15  落晨  阅读(511)  评论(0编辑  收藏  举报