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

代码

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

部分讲解

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()  

第一步:通过元素定位,已经知道滑动验证框的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)

但是好像没有报错了
在这里插入图片描述
但是还是没有滑动,去掉上述命令还是报错
在这里插入图片描述
这个报错有毒,继续查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"]"))

在这里插入图片描述
我觉得我就是这个吧
继续看看元素定位有没有问题
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>

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fo安方

觉得俺的文章还行,感谢打赏,爱

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

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

打赏作者

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

抵扣说明:

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

余额充值