selenium学习笔记

一、概念:

selenium是一个自动化测试框架,主要用到webdriver。

二、webdriver(支持各大主流浏览器),chromedriver安装:

下载chromedriver压缩包下载地址:ChromeDriver官方网站ChromeDriver仓库

注:国内不能直接访问Chrome官网,可以在ChromeDriver仓库中下载(ChromeDriver与Chrome版本要对应

window下建议将程序放到谷歌浏览器安装目录下(例如:C:\Program Files (x86)\Google\Chrome\Application,并将这个目录添加到环境变量中)

linux系统下添加环境变量(chromedriver假设在/home/user/下):

export PATH="$PATH:/home/user"

如果不设置环境变量,则需要在启动的时候指定路径

from selenium import webdriver
from selenium.webdriver import ChromeOptions

#实例化chromedriver
def get_chromedriver():
    #设置参数
    chrome_options = ChromeOptions()
    chrome_options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加载图片,加快访问速度
    # 反爬机制代码,采用此代码在F12控制台输入window.navigator.webdriver结果不是True,而是undefined就成功了
    chrome_options.add_experimental_option('excludeSwitches',['enable-automation'])
    chrome_options.add_argument('--headless')#控制是否显示浏览器,注释将显示
    #chrome_options.add_argument("--start-maximized")#控制浏览器运行时的窗口大小
    chrome_options.add_argument('--disable-gpu')
    driverpath = "D:\chromedriver.exe"#下载的chromedriver.exe的全路径
    #创建谷歌浏览器驱动对象,用于后续操作浏览器
    chromedriver = webdriver.Chrome(executable_path=driverpath, options=chrome_options)
    return chromedriver

三、启动浏览器

from selenium import webdriver

driver = webdriver.Chrome()

# 指定路径启动
driver = webdriver.Chrome(executable_path ='D:/chromedriver.exe')

# from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ChromeOptions
# option = Options()
option = ChromeOptions()
option.add_argument('--headless') #控制是否显示浏览器,注释将显示

# 将插件xpath应用扩展加到浏览器中
extension_path = 'D:/VM/2.0.2_0.crx'
option.add_extension(extension_path)

# 禁用浏览器正在被自动化程序控制的提示
option.add_argument('--disable-infobars')

driver = webdriver.Chrome(options=option)

# driver = webdriver.PhantomJS() # 无界面浏览已停止更新,建议使用headless

四、控制浏览器

# 范文某个页面
driver.get('https://www.baidu.com')

# 刷新
driver.refresh()
# 后退
driver.back()
# 前进
driver.forward()
# 退出
driver.quit()
# 当前url地址
driver.current_url
# 截图
driver.save_screenshot('./save.png')
# 窗口最大化
driver.maximize_window()

五、元素查找

# 根据css选择器查找
driver.find_element_by_css_selector()
# 根据元素id查找
driver.find_element_by_id()
# 利用xpath表达式查找
driver.find_element_by_xpath()
# 根据name属性查找
driver.find_element_by_name()
# 根据class属性查找
driver.find_element_by_class_name()
# 根据tag标签名字查找
driver.find_element_by_tag_name()

# 根据链接文本查找,全词匹配
driver.find_element_by_link_text()
# 根据链接文本查找,部分词匹配即可
driver.find_element_by_partial_link_text()

以上函数返回结果为单个WebElement对象,并且还有复数elements,例如:
driver.find_elements_by_xpath()
返回结果为列表,包含若干个WebElement对象,如果找不到则抛出异常

六、等待wait相关

# 隐式等待,如果没有立即查到某个元素,则等待10秒
driver.implicitly_wait(10)
# 显示等待(常使用)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 查找一个按钮,最长等待10秒,直到找到查找条件中指定的元素
find_btn= WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,'//div/a[2]')))

七、WebElement

和上面五条类似也有很多find函数

其它函数:

选择iframe:

driver.switch_to.frame(0)
或
driver.switch_to.frame('iframe名字')

# 从当前iframe切换回父页面
driver.switch_to.parent_frame()

# 从iframe切换回默认主窗口
driver.switch_to.default_content()

click:点击某个元素

send_keys:

# 向input框输入内容
input.send_keys('内容')
# 发送一个回车键
from selenium.webdriver.common.keys import Keys
input.send_keys(Keys.RETURN)

rect:返回元素的宽和高,以及在屏幕上的坐标

>>> driver.find_element_by_id('su').rect
{'height': 44, 'width': 108, 'x': 844, 'y': 219}

size:返回元素的宽和高(比如图片大小)

>>> driver.find_element_by_id('su').size
{'height': 44, 'width': 108}

location:返回在屏幕上的坐标

>>> driver.find_element_by_id('su').location
{'x': 844, 'y': 219}

text:返回查找元素内的文本信息,注意:用xpath表达式不可直接查找文本,只能用节点,再用text取文本

>>> driver.find_element_by_xpath('//div[@id="s-top-left"]/a[1]').text
'新闻'

get_attribute和get_property:获取元素属性值,要先写到节点,再用此方法

>>> driver.find_element_by_xpath('//div[@id="s-top-left"]/a[1]').get_property('href')
'http://news.baidu.com/'
>>> driver.find_element_by_xpath('//div[@id="s-top-left"]/a[1]').get_attribute('href')
'http://news.baidu.com/'

value_of_css_property:获取节点的CSS样式属性,直接写css样式属性

>>> driver.find_element_by_xpath('//div[@id="s-top-left"]/a[1]').value_of_css_property('color')
'rgba(34, 34, 34, 1)'

>>> driver.find_element_by_xpath('//div[@id="s-top-left"]/a[1]').value_of_css_property('display')
'inline-block'

page_source:获取页面源码

get_cookie/get_cookies:获取服务器返回的cookie

# 获取cookie可以通过内置的函数get_cookies(),所有get_cookies()返回值是由字典组成的列表。
>>> driver.get_cookies()

[{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '32288_1462_32439_32379_32355_32045_32393_32429_32115_32430'}, 
{'domain': '.baidu.com', 'expiry': 16270826.868372, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '511D707AFD063BF502B538461401:FG=1'}, 
{'domain': '.baidu.com', 'expiry': 3743908473.868326, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '511D707AFD063BF57F7240F1FC3E5'}, {'domain': '.baidu.com', 'expiry': 37438473.868351, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '15964688'}, 
{'domain': 'www.baidu.com', 'expiry': 15288828, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '123353'},
{'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}]
# 设置新的cookie
>>> driver.add_cookie({'name':'lianxi','value':'lili'})
>>> driver.get_cookies()
结果其中包含:
{'domain': 'www.baidu.com', 'expiry': 22272361, 'httpOnly': False, 
'name': 'lianxi', 'path': '/', 'secure': True, 'value': 'lili'}

八、执行JS

# 滚动条到底
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
# 滚动到某个元素可见
next_page = driver.find_element_by_css_selector('a.pn-next')
driver.execute_script("return arguments[0].scrollIntoView();", next_page)
# 执行异步js函数
driver.execute_async_script('send_xml_request()')
# 打开新的选项卡
driver.execute_script('window.open()')

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值