[python] simply use selenium to write web page login and sign-in functions without interface Google browser

Use python to write a simple function of automatic login and sign-in on server-side web pages

Note: It is only used for testers to automate script testing, do not use it for other purposes

-------------------------------------------------------------------------------------

Preparation

1. selenium , a plug-in to control the browser

Install selenium using pip: pip install selenium

2. No interface browser, that is, a browser without interface started on the server side

Download Headless Google Chrome

 # -*- 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)

Guess you like

Origin blog.csdn.net/Little_Matches/article/details/122400974