python 新版selenium基础操作(python库),网页元素定位、执行动作

简介

通过selenium的方式可以实现与web进行交互操作,本文列举了一些基础的写法,澄清了网络上一些错误写法,并给出了一些模拟动作函数。

欢迎大家收藏,未来会继续更新本文。文中的错误请大家在评论指出。

目录

  • 简介
  • 本文测试环境
  • 1. 启动浏览器
  • 2. 页面操作
  • 3. 元素定位
  • 4. 组合匹配
  • 5. 文字匹配
  • 6. 模拟动作

本文测试环境

版本说明:selenium=4.4.3
代码测试平台:win10(chrome=104.0.5112.102)、Mac M1(chrome=105.0.5195.125)

1. 启动浏览器

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 通过Option写入启动浏览器的参数
chrome_options = Options()
chrome_options.add_argument("--no-sandbox")  # 传入该能解决部分root相关问题
# chrome_options.add_argument("--headless")  # 传入该参数后,浏览器不会打开,一切操作后台执行
chrome_options.add_argument("--disable-dev-shum-usage")

# 基于上述参数启动浏览器
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(url)  # 指定打开的网页
print("Chrome Task title: " + driver.title)

2. 页面操作

# 前进
driver.forward()
# 后退
driver.back()
# 刷新
driver.refrash()

3. 元素定位

版本说明

新版selenium与旧版存在更新,统一使用find_element函数,通过By传参。

安装最新版selenium使用旧版会存在"AttributeError: ‘WebDriver’ object has no attribute xxxx"报错。

旧版:

(1)driver.find_element_by_id(“value”)

(2)driver.find_element_by_class_name(“value”)

(3)…

新版:
(1)driver.find_element(By.ID, “value”)

(2)driver.find_element(By.CSS_SELECTOR, “value”)

(3)…

个人推荐css selector,写法更加通用,传参中指定条件(id/class/type)。

需要注意的是,这里使用find_element方法只会返回一个元素,默认为第一个符合条件的元素。如果使用find_elements方法会返回list。

from selenium.webdriver.common.by import By
# 基于CSS
driver.find_element(By.CSS_SELECTOR, values)  # 通式
# 基于xpath 
driver.find_element(By.XPATH, values)  # 通式
条件 html values 写法1 values 写法2
标签 ‘div’ -
id < button id=“button”> ‘#button’ ‘[id=“button”]’
class < button class=“el-button”> ‘.el-button’ ‘[class=“el-button”]’
multi-class < button class=“el-button el-button–primary”> ‘.el-button.el-button–primary’ ‘[class=“el-button el-button–primary”]’
type
name
- - 同上

头尾匹配写法:其中,头尾匹配可以是部分字符,部分匹配需要是按空格分隔的完整字符。

条件 html values 写法1
(头部匹配)
values 写法2
(尾部匹配)
values 写法3
(部分匹配)
class < button class=“el-button el-button–primary”> ‘[class^=“el-button”]’ ‘[class$=“–primary”]’ ‘[class~=“el-button”]’

4. 组合匹配

(1)同时包含两个条件

# 这里使用CSS举例
# 包含input标签与type='text'属性
driver.find_element(By.CSS_SELECTOR, 'input[type="text"]')

# 包含type='text'与maxlength='50'两个条件的元素,语法上不需要and进行连接
driver.find_element(By.CSS_SELECTOR, '[type="text"][maxlength="50"]')

(2)包含一个条件且不包含另一条件

# 包含type='text'且不包含maxlength='50'的元素,语法上使用:not()进行连接
driver.find_element(By.CSS_SELECTOR, '[type="text"]:not([maxlength="50"])')

5. 文字匹配

新版css 使用’:contains(“xxx”)'会报错illegal。查阅了一些资料,没有发现在css selector中使用:contain的方法,欢迎大家补充。

同时,网上某些方法的语法存在问题,这里做一下澄清。

# 这里使用xpath进行text定位
driver.find_element(By.XPATH, values)
html values写法1 values写法2
模糊匹配 < div type=‘button’>登陆< /div> “//div[contains(text(),‘登陆’)]” “//*[contains(text(),‘登陆’)]”
准确匹配 < div type=‘button’>登陆< /div> “//div[text()=‘登陆’]” “//*[text()=‘登陆’]”

注:本人遇到过模糊匹配可以定位,但是准确匹配无法定位的情况。大家可以优先使用模糊匹配。

6. 模拟动作

这里给大家一些动作的示例,更多的组合动作大家自己探索。

from selenium.webdriver.common.action_chains import ActionChains

# 鼠标点击
def dom_click(values, by='css'):
    if by == 'css':
        driver.find_element(By.CSS_SELECTOR, values).click()
    elif by == 'xpath':
        driver.find_element(By.XPATH, values).click()

# 鼠标悬停
def dom_focus(values, by='css'):
    if by == 'css':
        location = driver.find_element(By.CSS_SELECTOR, values)
    elif by == 'xpath':
        location = driver.find_element(By.XPATH, values)
    chain = ActionChains(self._driver)
    chain.move_to_element(location)
    chain.perform()
    
# 键盘输入
def type(text):
    chain = ActionChains(driver)
    chain.send_keys(text)
    chain.perform()

你可能感兴趣的:(玩转python,python,selenium,chrome)