自动化selenium

目录

1.简介

2.模块安装与环境搭建​​​​​​​

2.1Selenium库的安装

2.2浏览器驱动的安装

2.3测试

3.相关知识

3.1快速入门

3.2定位UI元素

3.3添加代理IP

3.4携带用户信息启动

4.自动化抢红包


1.简介

        Selenium是一个Web的自动化测试工具,类型像我们玩游戏用的按键精灵,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。

        Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

        但是被用歪了,现在一般作为破解反爬的一种手段,一般用于解决动态页面或者js加密的爬虫问题。(ps:只要有js参与页面动态生成元素的都叫动态页面)


2.模块安装与环境搭建​​​​​​​

2.1Selenium库的安装

        pip install selenium==3.8.0

最好安装3.8.0版本的,方便后期方法的使用。

2.2浏览器驱动的安装

        因为本文章主要讲的时网页自动化,所以需要安装浏览器驱动,这里安装并使用的是谷歌浏览器驱动。

        注意:安装浏览器驱动时前提要看一下自己浏览器的版本,在下面网址中下载与自己浏览器版本相同的驱动。

谷歌浏览器下载配置:打开如下页面:CNPM Binaries Mirror

把exe文件放置到如下位置之一:Python的安装目录下(建议放这里 自己的python环境安装目录)

2.3测试

# 导入selenium的web驱动对象
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
print(driver.page_source)

        如果网页正常打开了百度网页就说明环境搭建成功了。

失败原因:

        1.浏览器驱动版本与浏览器的版本没有对应。

        2.浏览器驱动的位置没有放对地方。


3.相关知识

3.1快速入门

from selenium import webdriver
import time

# 打开浏览器驱动
driver = webdriver.Chrome()

# 加载网址
driver.get("http://www.baidu.com")

# 页面源码
print(driver.page_source)

# 获取 cookie
print(driver.get_cookies())

# url
print(driver.current_url)

# 截图
driver.save_screenshot("./baidu0.png")

# 输入
driver.find_element_by_id("kw").send_keys("996")
time.sleep(2)

# 截图
driver.save_screenshot("./baidu1.png")

# 点击
driver.find_element_by_id("su").click()
time.sleep(2)

# 截图
driver.save_screenshot("./baidu2.png")

# 退出
driver.quit()

        以上代码是进行网页自动化时常用到的方法。主要可以进行一些截图,获取cookies,模拟点击,登录等操作。

3.2定位UI元素

        定位单个元素主要使用find_element_by_xpath,定位多个相同元素主要使用find_elements_by_xpath。当然也可以使用find_elements_by_id等。

        (以find_element_by_xpath方法为例)获取标签的text值使用的是/text(),获取属性值使用的是@属性名。

# 通过xpath查找(select_one)
find_element_by_xpath

/text()
/@属性名

多个元素查找(select)
find_elements_by_xpath

find_elements_by_xxx

3.3添加代理IP

from selenium import webdriver

options = webdriver.ChromeOptions()  # 创建一个配置对象
options.add_argument('--proxy-server=http://120.38.68.247:17167')  # 使用代理ip
driver = webdriver.Chrome(chrome_options=options)  # 实例化带有配置的driver对象

3.4携带用户信息启动

options = webdriver.ChromeOptions()
options.add_argument("--user-data-dir=C:/Users/自己C盘中用户文件夹中的个人文件夹/AppData/Local/Google/Chrome/User Data/")
driver = webdriver.Chrome(options=options)

        使用这种方式更加真实的模拟浏览器访问,使用的是用户本地的信息,但是每次只能启动一个浏览器进程。如果程序报错想要再次进行测试就必须先把浏览器关掉。


4.自动化抢红包

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep


driver = webdriver.Chrome()
# 最大化网页
driver.maximize_window()
# 打开网址
driver.get('https://www.csdn.net/')
sleep(1)
# 定位登录/注册 按钮,并点击
Login_button = driver.find_element(By.CLASS_NAME, 'toolbar-btn-loginfun')
Login_button.click()
sleep(1)
# 切换iframe表单
driver.switch_to.frame('passport_iframe')
sleep(1)
# 定位密码登录按钮并点击
Passwor_login = driver.find_element(By.XPATH, '//span[4]')
Passwor_login.click()
sleep(1)
# 定位账号密码输入栏
User_information = driver.find_elements(By.TAG_NAME, 'input')
# 清空账号栏
User_information[0].clear()
# 输入账号
User_information[0].send_keys('用户名')
sleep(1)
# 清空密码栏
User_information[1].clear()
# 输入密码
User_information[1].send_keys('密码')
sleep(1)
driver.find_element(By.CLASS_NAME, 'icon-nocheck').click()
Login = driver.find_element(By.CLASS_NAME, 'base-button')
Login.click()
sleep(5)
# 切换回主页面
driver.switch_to.default_content()
sleep(5)
# 定位社区按钮,并点击
driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/div[1]/ul/li[4]/a').click()
time.sleep(3)
driver.find_element_by_xpath('//*[@id="tab-4"]').click()
time.sleep(3)

item = 1
while True:
    time.sleep(5)
    li_list = driver.find_elements_by_xpath('//div[@class="tab-list-item blink"]')[item]
    driver.execute_script("arguments[0].scrollIntoView();", li_list)
    if item % 10 == 0:
        driver.execute_script("arguments[0].scrollIntoView();", li_list)
    li_list.click()
    time.sleep(2)
    # 定位红包按钮,并点击
    driver.switch_to_window(driver.window_handles[1])
    time.sleep(2)
    try:
        driver.find_element_by_xpath('//span[@class="amount"]').click()
        time.sleep(2)
        if driver.find_element_by_xpath("//div[@class='env-container']/div[@id='preOpen']/footer/div[@class='red-openbtn open-start']"):
            print(driver.find_element_by_xpath("//div[@class='env-container']/div[@id='preOpen']/footer/div[@class='red-openbtn open-start']"))
            driver.find_element_by_xpath("//div[@class='env-container']/div[@id='preOpen']/footer/div[@class='red-openbtn open-start']").click()
        time.sleep(2)
        driver.find_element_by_xpath("//div[@class='close-btn']").click()
        print(item)
    except Exception as e:
        driver.find_element_by_xpath("//div[@class='redpack-card redpack-card-overdue large']").click()
        time.sleep(2)
        if driver.find_element_by_xpath("//div[@class='env-container']/div[@id='preOpen']/footer/div[@class='red-openbtn open-start']"):
            driver.find_element_by_xpath("//div[@class='env-container']/div[@id='preOpen']/footer/div[@class='red-openbtn open-start']").click()
        time.sleep(2)
        driver.find_element_by_xpath("//div[@class='close-btn']").click()
        print(item)
    except Exception as e:
        pass
    driver.close()
    time.sleep(1)
    # 切换
    driver.switch_to_window(driver.window_handles[0])
    item += 1

        该案例就是使用自动化模拟浏览器登录并进行自动抢红包功能,后期还会进行代码修改,喜欢的话加关注作者吧。 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

C&&Q

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

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

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

打赏作者

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

抵扣说明:

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

余额充值