• 网页自动化截图接口推送到手机(截图维格表数据)


    代码

    # 1、导包/提供python的库
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    # 2、实例化浏览器对象:类名()
    driver = webdriver.Chrome()
    
    # 3、打开网址(此处可以替换你要巡检的网页)
    driver.get('https://vika.cn/workbench/mirPTLa3fERa5Vt3Jt/dstyWW2rd6RgoKBxml/viwPVtNmkrHSC')
    #driver.get('https://18826227807:Stqer686@vika.cn/workbench/mirPTLa3fERa5Vt3Jt/dstyWW2rd6RgoKBxml/viwPVtNmkrHSC')
    # 4、时间轴看效果
    sleep(5)
    
    
    # 5、操作命令插入到这里
    # 5.1、最大化
    driver.maximize_window()  # 最大化浏览器
    # 5.2、鼠标单击切换到账号密码登录界面
    # 5.2.1、点击“手机/邮件登录”按钮
    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN"]/div[1]/div/button/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    # 5.2.2、点击“密码登录”按钮
    # 定位目标
    ele = driver.find_element_by_xpath('//*[@id="VIKA_CHANGE_MODE_BTN"]/span')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    
    
    # 5.3、输入账号密码
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN_PHONE_INPUT"]')
    ele.send_keys('1---')
    ele = driver.find_element_by_xpath('//*[@id="VIKA_LOGIN_PASSWORD_INPUT"]')
    ele.send_keys('---')
    # 5.4、点击“确认”按钮
    # 定位目标
    #ele = driver.find_element_by_css_selector('#VIKA_LOGIN_BTN')
    ele = driver.find_element_by_css_selector('[class="sc-dkPtyc dgAokf style_loginButton__hzwDO"]')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标单击
    action.click(ele)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    
    
    
    # 5.5、滑动验证框
    #import selenium.webdriver.support.ui as ui
    #wait = ui.WebDriverWait(driver,10)
    #wait.until(lambda driver: driver.find_element_by_方法("定位路径自己来"))
    #wait.until(lambda driver: driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div/div[3]/div/div/div/div/div/div[1]'))
    #xpath用隐式等待
    #driver.implicitly_wait(10)
    # 切换frame
    #iframe = driver.find_element_by_xpath('//iframe')    # 找到“嵌套”的iframe
    #driver.switch_to.frame(iframe)     # 切换到iframe
    # 定位目标
    # 相对路径
    #button = driver.find_element_by_xpath('//*[@id="nc_1_wrapper"]')
    #button = driver.find_element_by_xpath('//*[@id="nc_1__bg"]')
    # 绝对路径
    #button = driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div/div[3]/div/div/div/div/div/div[1]')
    #button = driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div/div[3]/div/div/div/div/div/span')
    # id定位
    #button = driver.find_element_by_css_selector('#nc_1__bg')
    # class
    #button = driver.find_element_by_css_selector('[class="nc_bg"]')
    # css
    # 语法id:#id属性值
    #button = driver.find_element_by_css_selector('#c_1__bg')
    ## 语法class:.class属性值 如: '.talA'
    # 语法class有多个属性值的时候:[class="全部属性值"]
    #button = driver.find_element_by_css_selector('[class="nc_bg"]')
    #button = driver.find_element_by_css_selector('[class="nc_iconfont btn_slide"]')
    ## 语法属性选择器
    #button = driver.find_element_by_css_selector('input[id="c_1__bg"]')
    #button = driver.find_element_by_css_selector('[name="wd"]')
    ## 语法层级选择器
    ## 父层级策略 > 子层级策略
    #button = driver.find_element_by_css_selector('#s_kw_wrap>input')
    #button = driver.find_element_by_css_selector('#form input')
    # 实例化鼠标
    #action = ActionChains(driver)
    # perform()用来执行ActionChains中存储的行为
    #action.click_and_hold(button).perform()  
    #action.reset_actions()
    # 移动滑块
    #action.move_by_offset(290,290).perform()  
    
    # 5.5、滑动验证框
    
    
    
    
    # 5.5、绕开验证码cookie登录
    # 1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
    #cookie_value = {'name':'BDUSS',
    #'value':'--'}
    #2、调用方法添加cookie
    #driver.add_cookie(cookie_value)
    #3、刷新页面 -->发送cookie给服务器验证
    #driver.refresh()
    
    
    # 5.6、时间轴看效果
    sleep(15)
    
    # 5.7、截图
    driver.get_screenshot_as_file('./a.png') 
    
    import requests
    import base64
    import hashlib
    
    # 8、图片base64码:提供给企业微信发送图片信息所需
    with open("./a.png", "rb") as f:
        base64_data = base64.b64encode(f.read()).decode()
    # base64.b64decode(base64data)
    print(base64_data)
    
    # 9、图片的md5值
    file = open("./a.png", "rb")
    md = hashlib.md5()
    md.update(file.read())
    res1 = md.hexdigest()
    print(res1)
    
    # 10、企业微信机器人发送消息:提供给企业微信发送图片信息所需
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1bd9d632-1f3b-445d-98e8-429a1d7415xx"
    headers = {"Content-Type": "text/plain"}
    data = {
        "msgtype": "image",
        "image": {
            "base64": base64_data,
            "md5": res1
        }
    }
    r = requests.post(url, headers=headers, json=data)
    print(r.text)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151

    部分讲解

    5.5、滑动验证框

    起初,通过xpth元素进行定位,但是出现意外
    使用selenium模拟登录解决滑块验证

    # 5.5、滑动验证框
    button = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]')
    # 实例化鼠标
    action = ActionChains(driver)
    # perform()用来执行ActionChains中存储的行为
    action.click_and_hold(button).perform()  
    action.reset_actions()
    # 移动滑块
    action.move_by_offset(180, 0).perform()  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第一步:通过元素定位,已经知道滑动验证框的xpth路径了,但是还是报错
    在这里插入图片描述

    在这里插入图片描述
    查看https://blog.csdn.net/u012067766/article/details/79793264得知有可能是存在frame

    在这里插入图片描述
    但是,ctrl+f搜索,没有iframe
    在这里插入图片描述
    换成class元素定位试试
    在这里插入图片描述
    还是报错
    在这里插入图片描述
    换成id也不行
    在这里插入图片描述

    在这里插入图片描述
    我再找https://blog.csdn.net/cojn52/article/details/87775307,可能元素加载未完成,不过不大可能

    #xpath用隐式等待
    driver.implicitly_wait(10)
    
    
    • 1
    • 2
    • 3

    但是好像没有报错了
    在这里插入图片描述
    但是还是没有滑动,去掉上述命令还是报错
    在这里插入图片描述
    这个报错有毒,继续查https://blog.csdn.net/MrLevo520/article/details/51954203

    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:“//*[@id=“nc_1_wrapper”]”}
    (Session info: chrome=104.0.5112.102)

    在这里插入图片描述

    import selenium.webdriver.support.ui as ui
    wait = ui.WebDriverWait(driver,10)
    #wait.until(lambda driver: driver.find_element_by_方法("定位路径自己来"))
    wait.until(lambda driver: driver.find_element_by_xpath("//*[@id="nc_1__bg"]"))
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    我觉得我就是这个吧
    继续看看元素定位有没有问题
    https://blog.csdn.net/qq_54219272/article/details/123310772
    该按钮有两个
    一是
    在这里插入图片描述
    二是
    在这里插入图片描述
    都试下
    在这里插入图片描述

    #xpath 
    //*[@id="nc_1_n1z"]
    //*[@id="nc_1__bg"]
    # full xpath
    /html/body/div[2]/div/div[2]/div/div/div[3]/div/div/div/div/div/div[1]
    /html/body/div[2]/div/div[2]/div/div/div[3]/div/div/div/div/div/span
    
    # 元素
    <div id="nc_1__bg" class="nc_bg" style="width: 24px;"></div>
    <span id="nc_1_n1z" class="nc_iconfont btn_slide" style="left: 0px;"></span>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    绝对路径也是报错
    在这里插入图片描述
    在这里插入图片描述

    尝试用鼠标移动滑块
    https://blog.csdn.net/huxiaoher/article/details/90266308

  • 相关阅读:
    【我的OpenGL学习进阶之旅】解决OpenGL在使用glUniform系列api时出现了 GL_INVALID_OPERATION 1282错误
    Redis 的大 Key 对持久化有什么影响?
    逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)
    Spring Boot企业级开发教程课后习题——第4章Spring Boot视图技术
    PyTorch中,卷积层、池化层、转置卷积层输出特征图形状计算公式总结
    Spring 框架学习(八)——AOP 的认识与使用
    Linux操作文件的命令
    windows 10 更新永久关闭
    【云服务器开放端口详细教程~来了】
    基于单片机的多关节机械臂抓取系统
  • 原文地址:https://blog.csdn.net/stqer/article/details/126555188