使用python编写简单的关于服务器端网页自动登录及签到的功能
注:仅用于测试人员自动化脚本测试,请勿用于其他用途
-------------------------------------------------------------------------------------
准备工作
1、selenium,控制浏览器的一个插件
使用pip安装selenium: pip install selenium
2、无界面浏览器,即在服务器端启动的没有界面的浏览器
下载无界面谷歌浏览器
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time
import os
browerName = "chromedriver"
# 无界面谷歌浏览器所在位置
chromePath =str(os.getcwd())+"\"+browerName
url="https://xxx.com/auth/login"
email = "your email"
passwd='your passwd'
options = webdriver.ChromeOptions()
options.add_argument('window-size=1920x3000') # 设置浏览器分辨率
options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--hide-scrollbars') # 隐藏滚动条,应对一些特殊页面
options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片,提升运行速度
options.add_argument('--headless') # 浏览器不提供可视化界面。Linux下如果系统不支持可视化不加这条会启动失败
options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错
options.add_argument('-enable-webgl') # 解决DevToolsActivePort文件不存在的报错
#options.add_argument('--disable-dev-shm-usage') # 设置浏览器分辨率
#options.add_argument('--disable-software-rasterizer')
def ChromeOptionsUtil(chromePath):
"""
谷歌无界面版
:param chromePath:
:return:
"""
#设置谷歌浏览器的路径
s = Service(chromePath)
# 第一个参数是谷歌options, 第二个参数是chromedriver的路径,用上面的Service包装
driver = webdriver.Chrome(options=options, service=s)
#获取url
driver.get(url)
#等数秒,浏览器打开和网页跳转需要时间
time.sleep(3)
#取ID为txtLoginCode的网页元素(用户名输入元素)
elem_user=driver.find_element(By.ID,'email')
#清空输入
elem_user.clear()
#键入用户名
elem_user.send_keys(email)
#取ID为txtPwd的网页元素(密码输入元素)
elem_pass=driver.find_element(By.ID,'passwd')
#清空输入
elem_pass.clear()
#键入密码
elem_pass.send_keys(passwd)
#取ID为btnLogin的登录按钮
elem_login=driver.find_element(By.ID,'login')
try:
#点击登录按钮
elem_login.click()
except Exception as e:
print('登录失败')
"""
#跳转到登录跳转的页面,有时单页无跳转登录可能有问题,推荐使用下面循环跳转寻找
driver.switch_to.window(driver.window_handles[-1])
"""
#等待页面跳转加载
print('登录成功')
time.sleep(3)
#循环所以打开页面,找到跳转页
for handle in driver.window_handles:
driver.switch_to.window(handle)
#找到页面的title
if 'XXX' in driver.title:
break
checkin= driver.find_element(By.ID,'checkin')
try:
#点击登录按钮
checkin.click()
except Exception as e:
print('签到失败')
#等待签到弹窗
time.sleep(3)
alert=driver.find_element(By.ID,'result_ok')
msg=driver.find_element(By.ID,'msg')
#点击按钮
alert.click()
if alert.text=="签到失败":
print('签到失败')
print(msg)
else:
print('成功签到')
print(msg)
#关闭浏览器,并离开
driver.close()
driver.quit()
return None
if __name__=="__main__":
ChromeOptionsUtil(chromePath)