前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium

Selenium

作者头像
TomatoCool
发布2023-07-31 15:11:04
1880
发布2023-07-31 15:11:04
举报
文章被收录于专栏:TomatoCoolTomatoCool

安装selenium

代码语言:javascript
复制
pip install selenium

安装驱动

驱动安装地址:

将驱动放到项目目录下,或者为驱动路径配置环境变量,也可以直接指定驱动路径。

代码语言:javascript
复制
#  指定驱动路径
driver = webdriver.Chrome(executable_path=path)

使用示例

代码语言:javascript
复制
from selenium import webdriver


#  Chrome浏览器
#  保持浏览器打开状态
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(chrome_options=option)
#  设置参数
url = 'https://leafbackaut.cn/'
#  发起请求
driver.get(url)

元素定位

元素定位可以根据id,class等属性定位,也可以根据标签名等信息进行定位。使用定位函数后会返回一个WebElement类或一个WebElement类的列表,用于接下来的操作。

旧版元素定位

根据id定位

代码语言:javascript
复制
driver.find_element_by_id(id)

根据name定位

代码语言:javascript
复制
driver.find_element_by_name(name)

根据class定位(返回列表)

代码语言:javascript
复制
driver.find_elements_by_class_name(class_name)

根据tag定位(返回列表)

代码语言:javascript
复制
driver.find_elements_by_tag_name(tag_name)

根据xpath定位

代码语言:javascript
复制
driver.find_element_by_xpath(xpath)

根据css选择器定位(返回列表)

代码语言:javascript
复制
driver.find_element_by_css_selector(css_selector)

根据文本定位(标签必须包含全部文本)(返回列表)

代码语言:javascript
复制
driver.find_element_by_link_text(text)

根据部分文本定位(返回列表)

代码语言:javascript
复制
driver.find_element_by_partial_link_text(text)

新版元素定位(推荐)

新版元素定位将所有定位函数封装成两个函数

代码语言:javascript
复制
#  返回定位到的第一个元素
find_element(self, by=By.ID, value=None)
#  返回列表
find_elements(self, by=By.ID, value=None)

其中By的属性如下:

代码语言:javascript
复制
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

使用方法:

代码语言:javascript
复制
from selenium.webdriver.common.by import By


#  通过class定位元素
driver.find_elements(By.CLASS_NAME, 'hello')
#  也可以不传入By,直接用属性值
driver.find_element('id', 'world')

元素等待

当元素还没有被加载出来时,会因为定位元素失败而报错,因此需要使用元素等待来保证程序正常运行。

显式等待

设置一个超时时间,期间确定某个条件触发,则继续运行程序,否则抛出异常。

代码语言:javascript
复制
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

参数说明:

  • driver:浏览器驱动
  • timeout:超时时间,单位秒
  • poll_frequency:每次检测的间隔时间,默认为0.5秒
  • ignored_exceptions:指定忽略的异常,默认为NoSuchElementException

判断条件:

代码语言:javascript
复制
until(method, message='')
until_not(method, message='')

参数说明:

  • method:每隔一段时间调用这个方法
  • message:如果超时,抛出TimeoutException,并显示message中的内容

使用示例:

代码语言:javascript
复制
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


#  打开浏览器
driver = webdriver.Chrome()
url = 'https://leafbackaut.cn/'
driver.get("url")
#  元素等待
#  锁定id为world的元素
try:
    element = WebDriverWait(driver,10).until(
        EC.presence_of_element_located((By.ID,"world"))
    )
finally:
    driver.quit()

EC包含了许多通用判断条件,具体如下:

  • title_is
  • title_contains
  • presence_of_element_located
  • visibility_of_element_located
  • visibility_of
  • presence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable
  • staleness_of
  • element_to_be_selected
  • element_located_to_be_selected
  • element_selection_state_to_be
  • element_located_selection_state_to_be
  • alert_is_present

隐式等待

设置一个超时时间,如果超出这个时间,还有元素没有被加载出来,就会抛出NoSuchElementException异常,没超时则不影响后面的代码运行。

代码语言:javascript
复制
#  time_to_wait为等待时间,单位为s
implicitly_wait(self, time_to_wait)

使用示例:

代码语言:javascript
复制
from selenium import webdriver


#  打开浏览器
driver = webdriver.Chrome(chrome_options=option)
url = 'https://leafbackaut.cn/'
driver.get(url)

#  隐式等待
driver.implicitly_wait(5)
try:
    driver.find_element_by_id('hello')
except Exception as e:
    print(e)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023 年 07 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装selenium
  • 安装驱动
  • 使用示例
  • 元素定位
    • 旧版元素定位
      • 新版元素定位(推荐)
      • 元素等待
        • 显式等待
          • 隐式等待
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档