Selenium webdriver的基本操作

常用类与方法

from selenium import webdriver   # 驱动浏览器
from selenium.webdriver import ActionChains   # 鼠标的相关操作,比如滑动验证
from selenium.webdriver.common.by import By   # 选择器,以什么方式选择标签元素
from selenium.webdriver.common.keys import Keys   # 键盘相关
from selenium.webdriver.support import expected_conditions as EC  # 各种判断,一般跟等待事件连用,比如说等待某个元素加载出来
from selenium.webdriver.support.wait import WebDriverWait  # 等待事件,可以与EC连用

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
browser.get('https://www.baidu.com')
browser.maximize_window()  # 窗口最大化
print(browser.current_url)   # 获取当前页URL
print(browser.title)   # 获取页面的title
print(browser.name)  # 获取driver对象:chrome
print(browser.current_window_handle)  # 获取当前窗口
print(browser.get_cookies())   # 获取cookies
print(browser.page_source)   # 获取当前页面内容
browser.refresh()    # 刷新
browser.save_screenshot('error.png')   # 保存截图
browser.close()   # 关闭当前窗口
browser.quit()   # 退出浏览器驱动,关闭所有关联窗口

选择器

from selenium import webdriver   # 驱动浏览器
from selenium.webdriver.support.wait import WebDriverWait  # 等待事件
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)

browser.get('https://www.baidu.com')
browser.find_element_by_id('su')  # id选择器
browser.find_element_by_class_name('xx')  # 类选择器,1个
browser.find_elements_by_class_name('xx')  # 类选择器,多个
browser.find_element_by_link_text('xxx')  # 链接文本选择器
browser.find_element_by_xpath('xxxx')  # xpath选择器
browser.find_element_by_tag_name('h1')  # 标签选择器,获取1个
browser.find_elements_by_tag_name('h1')  # 标签选择器,获取多个
browser.find_element_by_css_selector('xxx')  # 样式选择器

在选择器的选用时,要记得获取一个还是多个,要区分开find_elements还是find_element。这个s容易忽略。

browser.find_element_by_id("kw")

另外,上面的选择器,都可以写成下面的形式:

from selenium.webdriver.common.by import By  # 选择器,以什么方式选择标签元素
browser.find_element(by=By.ID, value='kw')  # 选择器类型, value值

标签选择器

import time
from selenium import webdriver  # 驱动浏览器
from selenium.webdriver import ActionChains  # 鼠标的相关操作,比如滑动验证
from selenium.webdriver.common.by import By  # 选择器,以什么方式选择标签元素
from selenium.webdriver.common.keys import Keys  # 键盘相关
from selenium.webdriver.support import expected_conditions as EC  # 各种判断,一般跟等待事件连用,比如说等待某个元素加载出来
from selenium.webdriver.support.wait import WebDriverWait  # 等待事件

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
browser.get('https://www.baidu.com')

input = browser.find_element_by_id('kw')  # id选择器
input.send_keys('张开嘴')  # 如果获取到的是个input框,就可以往里面填值
time.sleep(1)
input.clear()   # 清空值
submit = browser.find_element(By.ID, 'su')
submit.click()  # 点击事件
# 有的时候,click事件可能会有问题,我们使用键盘事件来处理
submit.send_keys(Keys.ENTER)
print(input.get_attribute('name'))  # 获取name属性
print(input.text)   # 获取内容,但这里的input没有text
print(input.tag_name)
print(input.get_property('name'))  # 获取给定属性,用法类似get_attribute
print(browser.find_element_by_class_name('mnav').text)   # 找个有text的

获取了标签对象后,我们可以获取这个标签的属性、内容、css样式和子标签(子标签也支持这些操作),示例来自pythonav登录页

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)


try:
    driver.get('https://pythonav.com/login/')

    # 根据 class 属性获取 a 标签对象
    a_obj = driver.find_element_by_class_name('navbar-brand')

    # 获取 a 标签的href属性
    print(a_obj.get_attribute('href'))
    print(a_obj.text)  # 获取标签的文本内容
    print(a_obj.tag_name)   # 获取标签的名称
    # 获取 css 样式
    print(a_obj.value_of_css_property('padding'))
    print(a_obj.value_of_css_property('font-size'))
    # 如果这个标签有 submit 属性,那么就可以点击它了,比如我们点击form表单中有submit属性的标签
    driver.find_element_by_xpath('//*[@id="fm"]/div[5]/div/input').submit()

    # 获取该标签下的子标签,或者子标签元素
    div_obj = driver.find_element_by_class_name('col-xs-3')
    print(div_obj.find_element_by_tag_name('input'))
    print(div_obj.find_element_by_tag_name('input').get_attribute('value'))

    # 获取验证码图片的大小
    print(driver.find_element_by_id('image_code').size)
    # # 保存验证码图片
    driver.find_element_by_id('image_code').screenshot('./a.png')

except Exception as e:
    print(e)

finally:
    time.sleep(10)
    driver.quit()
    # 代码截止到2019/12/19号有效

其他详见:https://www.cnblogs.com/Neeo/articles/11009755.html

 

posted @ 2020-04-03 11:40  大爷灰  阅读(271)  评论(0编辑  收藏  举报