Selenium 自动测试软件的使用(自动化操作)

        Selenium是一个用于Web应用程序测试的工具,很多时候可以拿来做自动化的功能,解放一些重复的事情,比如自动注册、登录、获取信息、处理报表等等,都是可以自己去设计一个流程即可,使用它,先从安装和配置开始!!

pip install Selenium

由于是用于web应用,需要下载浏览器不同版本对应的驱动(ChromeDriver),以Chrome为例,先查看版本: chrome://version/

Google Chrome    94.0.4606.71 (正式版本) (64 位) (cohort: Stable)

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 89
Current browser version is 94.0.4606.71 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

查看到我的Chrome版本是94.0.4606(中间默认就升级了),所以以前下载的 ChromeDriver版本就低了,需要下载对应的版本:
ChromeDriver Mirroricon-default.png?t=L892https://npm.taobao.org/mirrors/chromedriver/
或者使用Firefox浏览器:https://github.com/mozilla/geckodriver/releases

配置环境变量
比如: E:\MyChromeDriver, 把下载好的放进这个目录下
设置环境变量:系统变量–>Path,将“ E:\MyChromeDriver”目录添加到Path的值中即可

安装和配置好之后就可以使用它了,使用它最关键在于如何定位元素

定位一个元素

定位多个元素说明
find_element_by_idfind_elements_by_id通过元素id定位
find_element_by_namefind_elements_by_name通过元素name定位
find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位
find_element_by_link_textfind_elements_by_link_text通过完整超链接的文本定位
find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接的文本定位
find_element_by_tag_namefind_elements_by_tag_name通过标签定位
find_element_by_class_namefind_elements_by_class_name通过类名进行定位
find_element_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位

例,通过自动打开百度,自定义搜索并分别点开链接查看文章

from selenium import webdriver
from time import sleep

def main():
    mydriver = 'E:\MyChromeDriver\chromedriver.exe'
    browser = webdriver.Chrome(executable_path = mydriver)
    browser.get('https://www.baidu.com')
    browser.set_window_size(1800,1200)
    browser.find_element_by_id("kw").send_keys("日本核污水")
    browser.find_element_by_id("su").click()
    sleep(2)#有时需要停留下,不然内容还没有出来,定位不到就报错
    #print(browser.title)
    #print(browser.find_element_by_class_name("nums_text").text)
    titles = browser.find_elements_by_xpath('//div/h3/a')
    for t in titles:
        print(t.text)
        ts=browser.find_element_by_link_text(t.text)
        ts.click()
        sleep(1)
    #print(browser.find_element_by_xpath("//span[@class='nums_text']").text)

    sleep(5)
    #browser.quit()

if __name__ == '__main__':
    main()

如果是有框架的情况,需要进行切换才能定位,比如自动登录126邮箱

from selenium import webdriver
from time import sleep

def main():
    mydriver = 'E:\MyChromeDriver\chromedriver.exe'
    browser = webdriver.Chrome(executable_path = mydriver)
    browser.get('https://126.com')
    browser.set_window_size(1800,1200)
    sleep(2)
    xf = browser.find_element_by_xpath("//div[@id='loginDiv']/iframe")#由于iframe的id是动态的,所以先从它的上级元素来定位到本身
    browser.switch_to.frame(xf)
    browser.find_element_by_name("email").send_keys("tony")
    browser.find_element_by_name("password").send_keys("12345678")
    browser.find_element_by_id("dologin").click()
    browser.switch_to.default_content()

    sleep(5)
    #browser.quit()

if __name__ == '__main__':
    main()

send_keys模拟键盘的一些示例

send_keys(Keys.BACK_SPACE)删除键
send_keys(Keys.SPACE)空格键
send_keys(Keys.TAB)制表键
send_keys(Keys.ESCAPE)回退键(Esc键)
send_keys(Keys.ENTER)回车键
send_keys(Keys.CONTROL,‘a’)全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’)复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’)剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’)粘贴(Ctrl+V)
send_keys(Keys.F1…Fn)功能键 F1…Fn

另外有些网站禁止使用Selenium,可以通过js的window.navigator.webdriver来判断,如果是true就是代表通过Selenium在访问
熟悉js的可以使用下面这个来修改属性为false:

Object.defineProperties(navigator, {webdriver:{get:()=>false}});

不想让浏览器显示“chrome正受到自动测试软件的控制”信息,可以通过选项进行隐藏

option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
browser = webdriver.Chrome(options=option)
browser.get('https://126.com')

如果是一些隐藏的标签或界面,这个时候可以模拟鼠标操作,比如百度的设置下面的搜索设置,就需要鼠标放上去再显示出来,下面设置每页20条的示例

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

def main():
    option = webdriver.ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])#隐藏“chrome正受到自动测试软件的控制”
    browser = webdriver.Chrome(options=option)
    browser.get('https://www.baidu.com')
    browser.set_window_size(1800,1200)
    sleep(1)
    e1= browser.find_element_by_id("s-usersetting-top")#找到“设置”
    ActionChains(browser).move_to_element(e1).perform()#鼠标悬停在“设置”位置
    e2=browser.find_element_by_link_text("搜索设置")
    e2.click()
    sleep(1)
    e3=browser.find_element_by_id('nr_2')#每页20条的设置保存
    e3.click()
    e4=browser.find_element_by_class_name('prefpanelgo')
    e4.click()
    sleep(1)
    browser.switch_to.alert.accept()#接受提示框

    browser.find_element_by_id("kw").send_keys("日本核污水")
    browser.find_element_by_id("su").click()
    sleep(2)
    titles = browser.find_elements_by_xpath('//div/h3/a')
    for t in titles:
        print(t.text)
        ts=browser.find_element_by_link_text(t.text)
        ts.click()
        sleep(1)

    sleep(50)
    #browser.quit()

if __name__ == '__main__':
    main()

对Cookies的操作

for cookie in browser.get_cookies():
    print('%s----%s' %(cookie['name'],cookie['value']))
    
kv={'name':"MyName",'value':'Tony'}
browser.add_cookie(kv)#添加键值对
browser.delete_cookie('GUEST_LANGUAGE_ID')#删除这个键值
for cookie in browser.get_cookies():
    print('%s----%s' %(cookie['name'],cookie['value']))
browser.delete_all_cookies()#删除全部的cookies

对js脚本的执行操作

#执行js脚本,滚动条定位到x,y坐标位置
browser.execute_script("window.scrollTo(100,800);")
browser.execute_script("alert('你好,中国')")

截图操作

imgname=time.strftime("%Y%m%d%H%M%S", time.localtime())
browser.get_screenshot_as_file("D:\\"+imgname+".png")
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅恪光潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值