Python selenium使用入门

发布时间:2020-08-06 14:21:23 作者:小生博客
来源:网络 阅读:723
# 版本
    python==3.7.3
    selenium==4.0.0a1

# selenium pypi地址
https://pypi.org/project/selenium/

在目录前提示一下,有时候我们在获取了一组元素,然后进行循环时,会报错'陈旧的元素.....',为了避免这个错误,建议在需要处理一组元素时,我们先算出元素的数量,然后通过range(element_counter),来通过索引值再次搜索需要处理的元素.

目录:
一、初始化
二、元素查找
三、select标签操作
四、执行js脚本
五、通过js操作被遮挡元素
六、iframe操作
七、动作和动作链
八、异常处理
九、显式等待和预期条件
十、退出程序

一、初始化

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# 新版的webdriver.chrome默认指定了谷歌浏览器的驱动程序位置,如果要自定义位置,需要实例化一个Service对象
service = Service(executable_path=revoction_config.chromedriverpath)
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(5)   # 隐式等待未加载的元素
driver.get('http://www.baidu.com')

# 无头模式配置
opt = webdriver.ChromeOptions()     # 创建chrome对象
opt.add_argument('--no-sandbox')    # 启用非沙盒模式,linux必填
opt.add_argument('--disable-gpu')   # 禁用gpu,linux部署需填,防止未知bug
opt.add_argument('headless')        # 启用无头模式
driver = webdriver.Chrome(options=opt)
driver.implicitly_wait(5)           # 隐式等待未加载的元素
driver.get('http://www.baidu.com')

二、元素搜索

  1. 直接搜索

    # 一次查找一个
    driver.find_element_by_id                    # 按id属性
    driver.find_element_by_name                  # 按name属性
    driver.find_element_by_xpath             # 按XPath
    driver.find_element_by_link_text         # 按<a>标签中的text过滤
    driver.find_element_by_partial_link_text # 按<a>标签中的text过滤,包含某字符串的text
    driver.find_element_by_tag_name              # 按标签名
    driver.find_element_by_class_name            # 按类属性
    driver.find_element_by_css_selector          # 通过css选择器查找
    
    # 一次查找多个元素 (这些方法会返回一个list列表)
    driver.find_elements_by_name
    driver.find_elements_by_xpath
    driver.find_elements_by_link_text
    driver.find_elements_by_partial_link_text
    driver.find_elements_by_tag_name
    driver.find_elements_by_class_name
    driver.find_elements_by_css_selector

2.使用By方法.

   # 使用by方法和使用"直接搜索"的方式是一样的,只是书写不同
   from selenium.webdriver.common.by import By

   driver.find_element(By.XPATH,Expression)
   同等于
   driver.find_element_by_xpath(Expression)

   # 查找name属性等于username的input标签
   driver.find_element(By.XPATH,"//input[@name='username']")

   # 查看name属性以user开头的标签
   driver.find_element(By.XPATH,"//input[starts-with(@name,'username')]")

   # 如果你搜索出来的是多个元素
   driver.find_elements()

3.XPath

XPath有两种搜索方式,一种是绝对路径一种是相对路径.

三、select标签操作(官方称之为:UI Support).

from selenium.webdriver.support.select import Select

# step 1: 查找select标签并且示例化.
select_element = driver.find_element(By.XPATH,"//select[@class='address']")
select = Select(select_element)

# step 2: 通过option的text文本选中
select.select_by_visible_text('北京')

四、执行js脚本.

# 比如在select标签中你想要的option不存在
java_scripts_text = '''d = document.getElementById('address');d.options.add(new Option("{0}","{0}"));'''.format('北京')

driver.execute_script(java_scripts_text)

# 然后再实例化Select并且选择text为北京的option即可

五、通过js操作被遮挡元素


baidu_button = driver.find_element(By.XPATH,"//a[@name='baidu']")
driver.execute_script("arguments[0].click();", baidu_button)

六、iframe操作.

要想操作iframe里面的元素,必须先进入iframe.
# 首先找到iframe标签
i = driver.find_element(By.XPATH, "//iframe")
# 进入iframe
driver.switch_to.frame(i)
# 退出iframe
driver.switch_to.default_content()

七、动作和动作链(官方称之为:Action Chains).

  1. 动作

    # 在input元素中输入text
    input_element = find_element(By.XPATH,"//input[@name='username']")
    input_element.send_keys('xiaoming')
    
    # 点击元素
    a_element = find_element(By.XPATH,"//a[@class='baidu']")
    a_element.click()
  2. 动作链

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    # 按住Ctrl键然后按鼠标左键点击a标签
    a_element = find_element(By.XPATH,"//a[@class='baidu']")
    
    ac = ActionChains(driver)
    
    # 首先移动到a标签,然后按下左边的Ctrl键,再点击鼠标左键,最后释放左边的Ctrl键,并且执行这个动作链
    ac.move_to_element(a_element).key_down(Keys.LEFT_CONTROL).click().key_up(Keys.LEFT_CONTROL).perform()
    
    # 释:
    key_down():     按下某键
       key_up():        释放某键
       send_keys(): 按下并且释放某键
       click():     单机鼠标左键
       perform():       执行动作链

八、异常处理(官方称之为:Exceptions).

异常处理的类都在selenium.common.exceptions.*中,要想捕捉selenium的异常,必须先导入对象的类

from selenium.common.exceptions import NoSuchElementException

try:
    a_element = driver.find_element(By.PARTIAL_LINK_TEXT, '百度')
except NoSuchElementException:
    print("没有找到text为百度的a标签.")

九、显式等待和预期条件.


WebDriverWait(WebDriver实例, 最长等待时间, 每次检测时隔, 忽略的异常)

# 等待符合条件的元素加载出来,如果加载成功则返回WebElement
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    locator = (By.ID, "username")
    WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

    注意: 注意你需要等待的是一组元素,则使用'presence_of_all_elements_located'实现.

# 判断元素是否可见并且可以点击,如果可以返回元素,不可以返回False
    WebDriverWait(driver, 20, 0.5).until(EC.element_to_be_clickable(locator))

    可见时点击
    WebDriverWait(driver, 20, 0.5).until(EC.element_to_be_clickable(locator)).click()

十、退出程序.

driver.close()
driver.quit()
推荐阅读:
  1. python+selenium脚本如何实现每天自动登记
  2. 使用python怎么模拟点击网页按钮

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

web自动化测试 selenium python

上一篇:sql 常用语句

下一篇:在mac卸载python2的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》