selenium入门详细指南(附淘宝抢购案例)

selenium是一款web自动化测试工具,可以很方便地模拟真实用户对浏览器进行操作,它支持各种主流浏览器:IE、Chrome、Firefox、Safari、Opera等。


selenium有多种编程语言的客户端驱动,编写自动化脚本语法简洁,其中python的selenium库便非常的受欢迎。

你可以使用selenium做web测试或者爬虫,自动抢票、自动下单也可以用selenium来做。

演示自动打开淘宝网(文末会有秒抢流程):


使用Selenium实现自动化测试,需要3个要素:

1.selenium客户端或者与特定编程语言绑定的客户端驱动,可以是python,java,js等;

2.浏览器驱动, 这个驱动是根据不同的浏览器开发的,不同的浏览器使用不同的webdriver驱动程序且需要对应相应的浏览器版本;

3.浏览器,目前selenium支持市面上大多数浏览器,如:火狐,IE等;


安装selenium

可以使用pip或conda命令安装selenium:

pip install selenium

安装浏览器驱动

Selenium调用浏览器必须有一个webdriver驱动文件,下载好后把驱动程序放到python安装目录里即可。

各大浏览器驱动下载地址:

Firefox:
https://github.com/mozilla/geckodriver/releases/

Chrome:
https://sites.google.com/a/chromium.org/chromedriver/

IE:
http://selenium-release.storage.googleapis.com/index.html

以Chrome为例:


先在设置里查看Chrome版本:



然后下载对应的chromedrive,可以在淘宝的镜像网站下载:
http://npm.taobao.org/mirrors/chromedriver/

找到对应的版本号下载,解压到python安装目录里,或者anaconda安装目录scripts文件夹里。


selenium操作浏览器

在notebook中进行selenium的脚本编写,可以随写随调,非常方便。

首先需要从selenium中导入webdriver模块:

from selenium import webdriver

然后打开浏览器:

browser = webdriver.Chrome()

最后可以打开某网址:

browser.get("https://www.taobao.com/")

针对浏览器的主要操作方法:

  • 创建浏览器对象:driver = webdriver.xxx()
  • 窗口最大化:maximize_window()
  • 获取浏览器尺寸:get_window_size()
  • 设置浏览器尺寸:set_window_size()
  • 获取浏览器位置:get_window_position()
  • 设置浏览器位置:set_window_position(x,y)
  • 关闭当前标签/窗口:close()
  • 关闭所有标签/窗口:quit()

selenium定位元素

因为selenium是模仿真实点击浏览器的行为,所以必须要先定位网页元素,才能进行各种操作。

定位页面元素的8种主要方式

  • id定位:driver.find_element_by_id(value)
  • name属性值定位:driver.find_element_by_name(value)
  • 类名定位: driver.find_element_by_class_name(value)
  • 标签名定位: driver.find_element_by_tag_name(value)
  • 链接文本定位:driver.find_element_by_link_text(value)
  • 部分链接文本:driver.find_element_by_partial_link_text(value)
  • xpath路径表达式:driver.find_element_by_xpath(value)
  • css选择器:driver.find_element_by_css_selector(value)

selenium操作网页

定位元素后,需要对网页进行各种操作,比如点击、刷新、保存等。

点击展开新的页面,点击方法:element.click()

其他主要操作方法:

  • 请求某个url:driver.get(url)
  • 刷新页面操作:refresh()
  • 回退到之前的页面:back()
  • 前进到之后的页面:forward()
  • 获取当前访问页面url:current_url
  • 获取当前浏览器标题:title
  • 保存图片:get_screenshot_as_png()/get_screenshot_as_file(file)
  • 网页源码:page_source

使用selenium抢购商品

  1. 导入selenium相关模块
# 导入库
from selenium import webdriver
import datetime
import time
  1. 打开chrome浏览器
# 记录时间
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 打开chrome 
browser = webdriver.Chrome()
  1. 登录淘宝

# 登录
def login():
    # 打开淘宝首页,通过扫码登录
    browser.get("https://www.taobao.com/")
    time.sleep(3)
    # 打开登录界面
    find_login = browser.find_element_by_link_text("亲,请登录")
    if find_login:
        find_login.click()
        print("请扫码登录")
        time.sleep(10)
        
login()
  1. 选择购物车列表
# 选择购物车列表
def picking(method):
    # 是否全选购物车
    if method == 0:
        while True:
            try:
                if browser.find_element_by_id("J_SelectAll1"):
                    browser.find_element_by_id("J_SelectAll1").click()
                    print('全选购物车成功')
                    break
            except:
                print(f"找不到购买按钮")
    else:
        print(f"请手动勾选需要购买的商品")
        time.sleep(1)
  1. 点击结算按钮
# 点击结算按钮
def settlement():
    while True:
        try:
            if browser.find_element_by_id('J_SelectedItemsCount').text >= '1':
                browser.find_element_by_link_text("结 算").click()
                print(f"结算成功,准备提交订单")
                break
        except:
            pass
  1. 点击提交订单按钮
# 点击提交订单按钮
def submitting():
    while True:
        try:
            if browser.find_element_by_link_text('提交订单'):
                browser.find_element_by_link_text('提交订单').click()
                print(f"抢购成功,请尽快付款")
                break
        except:
            print(f"再次尝试提交订单")
  1. 开始执行抢购
def run(times):
    # 打开购物车列表页面
    print('正在抢购!')
    browser.get("https://cart.taobao.com/cart.htm")
    time.sleep(3)
    while True:
        now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
        # 对比时间,时间到的话就点击结算
        if now > times:
            # 全选购物车
            picking(0)
            # 点击结算按钮
            settlement()
            # 提交订单
            submitting()
            print(now)
            break

结论

selenium还有很多强大的功能,后续会继续分享,也期待大家留言说说你的selenium使用心得。

最后补充一句,因为selenium涉及操作网页,所以需要使用者有一定的html知识储备,大家学之前可以先去看看html基础知识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,848评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,529评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,824评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,329评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,227评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,879评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,218评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,877评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,159评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,155评论 2 315
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,987评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,736评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,273评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,407评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,663评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,158评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,517评论 2 339