Python之学习Selenium(二):API和常用操作

今天药忘吃喽~ 2022-11-22 00:01 297阅读 0赞

API和常用操作

  • 基本操作
    • 一、声明浏览器对象(需要安装相应浏览器的驱动)
    • 二、查找元素
    • 三、元素交互操作
    • 四、获取元素信息(属性,文本,位置,大小等)
    • 五、对Frame框架的处理
    • 六、等待操作
  • 相关API
    • 1.前进后退
    • 2.Cookies
    • 3.选项卡操作
    • 4.异常处理

基本操作

Selenium中文文档

一、声明浏览器对象(需要安装相应浏览器的驱动)

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser = webdriver.Firefox()
  4. browser = webdriver.Edge()
  5. browser = webdriver.PhantomJS()
  6. browser = webdriver.Safari()

二、查找元素

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser.get('https://www.taobao.com')
  4. input_1 = browser.find_element_by_id('q')
  5. input_2 = browser.find_element_by_css_selector('#q')
  6. input_3 = browser.find_element_by_class_name('search-combobox-input')
  7. #定义一个页面中的元素,返回一个对象
  8. find_element_by_name
  9. find_element_by_xpath
  10. find_element_by_link_text
  11. find_element_by_partial_link_text
  12. find_element_by_tag_name
  13. find_element_by_class_name
  14. find_element_by_css_selector

多个元素,使用方法一样

  1. #这些方法将返回一个列表
  2. find_elements_by_name
  3. find_elements_by_xpath
  4. find_elements_by_link_text
  5. find_elements_by_partial_link_text
  6. find_elements_by_tag_name
  7. find_elements_by_class_name
  8. find_elements_by_css_selector

三、元素交互操作

  • 最常用的就是对输入框,按钮进行操作

    from selenium import webdriver
    import time

    browser = webdriver.Chrome()
    browser.get(‘https://www.taobao.com‘)
    input = browser.find_element_by_id(‘q’)
    input.send_keys(‘iPhone’)

    这里也可以对输入框传入回车键

    time.sleep(1)
    input.clear() #clear清除元素的内容
    input.send_keys(‘iPad’) #send_keys模拟按键输入
    button = browser.find_element_by_class_name(‘btn-search’)
    button.click() #click点击元素

  • 交互动作,动作链
    模拟拖拽动作

    from selenium import webdriver
    from selenium.webdriver import ActionChains

    模拟拖拽

    browser = webdriver.Chrome()
    url = ‘http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable‘
    browser.get(url)
    browser.switch_to.frame(‘iframeResult’) #切换到内部的iframe框架
    source = browser.find_element_by_css_selector(‘#draggable’) #选择源
    target = browser.find_element_by_css_selector(‘#droppable’) #选择目标
    print(source,target)
    actions = ActionChains(browser) #创建动作链对象
    actions.drag_and_drop(source, target) #设计动作

    重点

    actions.perform()#开始你的表演

  • 执行JavaScript

    from selenium import webdriver

    browser = webdriver.Chrome()
    browser.get(‘https://www.zhihu.com/explore‘)
    browser.execute_script(‘window.scrollTo(0, document.body.scrollHeight)’)
    browser.execute_script(‘alert(“To Bottom”)’)

四、获取元素信息(属性,文本,位置,大小等)

  • 获取属性

    from selenium import webdriver

    browser = webdriver.Chrome()
    url = ‘https://www.zhihu.com/explore‘
    browser.get(url)
    logo = browser.find_element_by_id(‘zh-top-link-logo’)
    print(logo)
    print(logo.get_attribute(‘class’))

  • 获取文本

    input = browser.find_element_by_class_name(‘zu-top-add-question’)
    print(input.text)

  • 获取ID,位置,标签名,大小

    print(input.id)
    print(input.location)
    print(input.size)

    print(input.tag_name)

    0.6052552682324703-2
    { ‘x’: 759, ‘y’: 7}
    { ‘height’: 32, ‘width’: 66}
    button

五、对Frame框架的处理

有时候一个网页会镶嵌一个iframe框架,获取里面的东西需要进入这个框架

  1. from selenium import webdriver
  2. from selenium.common.exceptions import NoSuchElementException
  3. browser = webdriver.Chrome()
  4. url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
  5. browser.get(url)
  6. browser.switch_to.frame('iframeResult') #进入一个框架,输入框架的ID
  7. source = browser.find_element_by_css_selector('#draggable')
  8. print(source)
  9. try:
  10. logo = browser.find_element_by_class_name('logo')#在子框架中获取不到父框架的标签
  11. except NoSuchElementException:
  12. print('NO LOGO')
  13. browser.switch_to.parent_frame() #进入父框架
  14. logo = browser.find_element_by_class_name('logo')
  15. print(logo)
  16. print(logo.text)

六、等待操作

等待某些需要的东西加载完成(基本就是根据网速看他全部加载完成)

  • 隐式等待

当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser.implicitly_wait(10) #设置隐式等待时间
  4. browser.get('https://www.zhihu.com/explore')
  5. input = browser.find_element_by_class_name('zu-top-add-question')
  6. print(input)
  • 显式等待

    显式等待

    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

    browser = webdriver.Chrome()
    browser.get(‘https://www.taobao.com/‘)
    wait = WebDriverWait(browser, 10)
    input = wait.until(EC.presence_of_element_located((By.ID, ‘q’)))
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ‘.btn-search’)))
    print(input, button)

相关API

1.前进后退

  1. import time
  2. from selenium import webdriver
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.baidu.com/')
  5. browser.get('https://www.taobao.com/')
  6. browser.back()
  7. time.sleep(1)
  8. browser.forward()
  9. browser.close()

2.Cookies

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser.get('https://www.zhihu.com/explore')
  4. print(browser.get_cookies())
  5. browser.add_cookie({ 'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})
  6. print(browser.get_cookies())
  7. browser.delete_all_cookies()
  8. print(browser.get_cookies())

3.选项卡操作

很神奇

  1. import time
  2. from selenium import webdriver
  3. browser = webdriver.Chrome()
  4. browser.get('https://www.baidu.com')
  5. browser.execute_script('window.open()') #通过执行JavaScript来打开一个选项卡,通用方式
  6. print(browser.window_handles) #打印所有的窗口信息
  7. browser.switch_to_window(browser.window_handles[1])
  8. browser.get('https://www.taobao.com')
  9. time.sleep(1)
  10. browser.switch_to_window(browser.window_handles[0])
  11. browser.get('https://www.taobao.com')

4.异常处理

会出现各种各样的异常,找不到元素,加载不出来,无法点击等

  1. from selenium import webdriver
  2. from selenium.common.exceptions import TimeoutException, NoSuchElementException
  3. browser = webdriver.Chrome()
  4. try:
  5. browser.get('https://www.baidu.com')
  6. except TimeoutException:
  7. print('Time Out')
  8. try:
  9. browser.find_element_by_id('hello')
  10. except NoSuchElementException:
  11. print('No Element')
  12. finally:
  13. browser.close()

发表评论

表情:
评论列表 (有 0 条评论,297人围观)

还没有评论,来说两句吧...

相关阅读

    相关 API()

    System System类用于描述系统一些信息,该类中的方法和属性都是静态的。 out:标准输出流,默认对应的设备是显示器。 in:标准输入流,默认的设备