ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

北邮每日打卡脚本(失败记录)

2021-04-23 11:01:06  阅读:381  来源: 互联网

标签:脚本 chrome 北邮 find bro options 打卡 btn div


北邮疫情防控系统每日打卡脚本

博客原文地址
selenium使用教程

程序使用selenium库,原因是这个打卡系统似乎是单独的,比较简单,没有任何权限管理验证码这样的安全系统,所以可以使用,再高级点就不行了。

Linux(CentOS7)上安装selenium的环境

浏览器和驱动一定要对应上,否则就会出现各种问题,下面准备了80.0.3987.106版本对应的浏览器和驱动

谷歌驱动下载

谷歌浏览器下载

将下载好的传入服务器,安装已经上传谷歌浏览器

# 安装谷歌浏览器以及相关依赖
yum localinstall google-chrome-stable_current_x86_64.rpm 
# 查看谷歌浏览器版本号
google-chrome-stable --version
# 测试谷歌浏览器
google-chrome --headless --disable-gpu --dump-dom --no-sandbox https://www.baidu.com

移动谷歌驱动

# 移动驱动
sudo mv chromedriver /usr/bin/chromedriver
# 测试驱动是否可用
chromedriver

配置python环境,用pip3安装python用到的包,然后就可以运行了。

具体程序

程序比较失败,一是微信定位不知道怎么弄,本来以为定位只是为了获取表单数据,还是想简单了,目前程序能打卡但是定位不在北京;二是学生机实属辣鸡,跑个python都费劲,还是naive了。

from selenium import webdriver
from lxml import etree
import time
# 无可视化界面
from selenium.webdriver.chrome.options import Options
# 规避检测
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
import schedule

# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-blink-features=AutomationsControlled')

# 实例化浏览器对象
# bro = webdriver.Chrome(executable_path='./chromedriver', options=chrome_options)
bro = webdriver.Chrome(executable_path='/usr/bin/chromedriver', options=chrome_options)
# 打开可使用可视化界面
# bro = webdriver.Chrome(executable_path='./chromedriver')
bro.get('https://app.bupt.edu.cn/ncov/wap/default/index')


# 登陆
def login(username, password):
    login_url = bro.current_url
    username_tag = bro.find_element_by_xpath("//*[@id='app']/div[2]/div[1]/input")
    password_tag = bro.find_element_by_xpath("//*[@id='app']/div[2]/div[2]/input")
    username_tag.send_keys(username)
    password_tag.send_keys(password)
    btn = bro.find_element_by_xpath("//*[@id='app']/div[3]")
    btn.click()
    report_url = bro.current_url
    while report_url == login_url:
        report_url = bro.current_url
        time.sleep(3)
    print("登陆成功: ", report_url)
    return True


# 填写表单
def report():
    # 是否在校选择
    btn_in_school = bro.find_element_by_xpath(
        "/html/body/div[1]/div/div/section/div[4]/ul/li[4]/div/div/div[1]/span[1]")
    btn_in_school.click()
    # 位置选择
    btn_location = bro.find_element_by_xpath("/html/body/div[1]/div/div/section/div[4]/ul/li[8]/div/input")
    bro.execute_script("arguments[0].removeAttribute('readonly')", btn_location)
    btn_location.send_keys("北京市 海淀区")

    # 风险选择
    btn_risk = bro.find_element_by_xpath("/html/body/div[1]/div/div/section/div[4]/ul/li[9]/div/div/div[2]/span[2]")
    btn_risk.click()
    time.sleep(3)
    # 点击提交
    btn_submit = bro.find_element_by_xpath("/html/body/div[1]/div/div/section/div[5]/div/a")
    btn_submit.click()
    time.sleep(3)
    # 取消填报
    btn_confirm = bro.find_element_by_xpath("//*[@id='wapat']/div/div[2]/div")
    btn_confirm.click()
    print("取消填报")
    btn_city = bro.find_element_by_xpath("/html/body/div[1]/div/div/section/div[4]/ul/li[10]/div/div/div[4]/span[1]")
    btn_city.click()
    time.sleep(3)
    # 点击提交
    btn_submit = bro.find_element_by_xpath("/html/body/div[1]/div/div/section/div[5]/div/a")
    btn_submit.click()
    time.sleep(3)

    btn_has_submit = bro.find_element_by_xpath("//*[@id='wapcf']/div/div[2]/div[2]")
    btn_has_submit.click()
    print("打卡成功")
    time.sleep(3)


def run_main():
    if login("账号", "密码") is True:
        report()
    bro.quit()
    print("退出")


if __name__ == '__main__':
    run_main()
    while True:
        schedule.every().day.at("00:05").do(run_main)

遇到的坑

CentOS7安装谷歌浏览器后无法yum功能使用,需要到/etc/yum.repos.d目录下,找到chrome的repo,也就是google-chrome.repo, 删除掉或者mv到别的地方,然后yum clean all, 就能解决。

rm -rf /etc/yum.repos.d/google-chrome.repo
yum clean all

标签:脚本,chrome,北邮,find,bro,options,打卡,btn,div
来源: https://blog.csdn.net/weixin_40003021/article/details/116045908

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有