首页 > 其他分享 >Airtest-Selenium实操小课④:微信读书上阅读书籍

Airtest-Selenium实操小课④:微信读书上阅读书籍

时间:2024-06-21 11:10:25浏览次数:21  
标签:__ 微信 driver element 小课 window div Selenium 页面

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

1. 前言

上一课我们讲到用Airtest-Selenium爬取下载可爱的猫猫图片,还没看的同学可以戳这里看看~

那么今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网站,点击进入书本进行阅读。

2.需求分析和准备

整体的需求大致可以分为以下步骤:

  • 打开chrome浏览器
  • 打开百度网页
  • 搜索“微信读书”
  • 点击进入“微信读书”官网
  • 搜索关键词“长安的荔枝”
  • 点击进入“长安的荔枝”书本
  • 翻阅书籍前五章内容

在写脚本之前,我们需要准备好社区版AirtestIDE(目前最新版为1.2.17),设置好chrome.exe地址和对应的driver即可。

3. 脚本实现与运行效果

3.1 脚本运行效果

在运行过程中,我们将每次的搜索结果通过读取url链接的方式去实现页面跳转,在进入到书籍阅读界面时,根据读取到的页面高度、文档高度、去计算可滑动高度,实现滑动阅读的操作。并且根据页面的JS距离去判断是否已经滑动到文档底部,从而执行点击下一章的操作。

先来看下我们整体的运行效果:

3.2 完整代码分享

这里也附上完整的示例代码给大家参考,有需要的同学可以自取学习哦:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.by import By

# 创建一个实例
driver = WebChrome()
driver.implicitly_wait(20)

def start_selenium():
    driver.get("https://www.baidu.com/")
    # 输入搜索关键词并提交搜索
    search_box = driver.find_element_by_name('wd')
    search_box.send_keys('微信读书')
    search_box.submit()

    # 获取搜索结果并打开新页面
    open_new_page()

    # 滚动页面并阅读章节
    read_chapters()


def open_new_page():
    # 使用XPath查找文本为 "微信读书" 的元素并点击
    try:
        element = driver.find_element_by_xpath("//div[@id='content_left']/div[@id='1']/div[@class='c-container']/div[1]/h3[@class='c-title t t tts-title']/a")
    except Exception as e:
        element = driver.find_element_by_xpath('//*/text()[normalize-space()="微信读书"]/parent::*')
    element.click()

    # 获取所有窗口句柄
    window_handles = driver.window_handles
    # 切换到新打开的窗口
    driver.switch_to.window(window_handles[1])
    # 获取新页面的链接
    new_page_url = driver.current_url
    # 打印新页面的链接
    print(f"新页面的链接: {new_page_url}")
    driver.get(new_page_url)
    
    #点击搜索书籍《长安的荔枝》
    driver.find_element_by_xpath("//input[@type='text']").click()
    driver.find_element_by_xpath("/html/body/div[7]/div/div/div[2]/div/input").send_keys("长安的荔枝")
    driver.find_element_by_xpath("/html/body/div[7]/div/div/div[2]/span[2]").click()


    # 获取a标签的URL以及书籍简介
    search_box = driver.find_element_by_xpath("/html/body/div[7]/div/div[3]/div/ul/li/a")
    print(f"a标签的文本: {search_box.text}")
    url = search_box.get_attribute('href')
    # 打印URL
    print(f"URL: {url}")
    driver.get(url)  # 请求搜索链接-跳转

#开始阅读
def read_chapters():
	#切换上下滚动阅读模式
    button = driver.find_element(By.CSS_SELECTOR,"button[title='切换到上下滚动阅读'].readerControls_item.isHorizontalReader")
    button.click()

    for i in range(5):  # 阅读章节5章
        # 滚动到页面最下方
        scroll_to_bottom()
        sleep(5)
        # 点击下一章节按钮
        next_chapter = driver.find_element(By.XPATH,"//div[@class='readerFooter']/div/button[@class='readerFooter_button']")
        next_chapter.click()

#滑动书籍
def scroll_to_bottom():
    while True:
        is_bottom = driver.execute_script('return (window.innerHeight + window.pageYOffset) >= document.documentElement.scrollHeight;')
        # 判断是否滚动到屏幕最底部
        if not is_bottom:
            # 获取页面高度
            heig_ = driver.execute_script("return document.body.scrollHeight;")
            # 获取当前页面底部距离顶部的距离
            next_ = driver.execute_script("return (window.innerHeight + window.pageYOffset);")
            # 计算滚动距离
            p_num = heig_ / 1000
            print(heig_ / 1000)
            # 滚动到页面最下方
            driver.execute_script(f"window.scrollTo(0, {p_num + next_});")
            sleep(2)
        else:
            print('已滚动到屏幕最底部')
            break

#管理 WebDriver 的生命周期
class SeleniumDriver:
    def __enter__(self):
        return driver

    def __exit__(self, exc_type, exc_val, exc_tb):
        pass


if __name__ == "__main__":
    with SeleniumDriver():
        start_selenium()

3.2 重要知识点

1)返回当前页面的文档在垂直方向上的高度
driver.execute_script("return document.body.scrollHeight;")
2)获取当前页面可见区域的高度和页面滚动距离
driver.execute_script("return (window.innerHeight + window.pageYOffset);")

3) 判断页面是否已经滚动到底部

driver.execute_script('return (window.innerHeight + window.pageYOffset) >= document.documentElement.scrollHeight;')
4)管理WebDriver的生命周期

如果不需要完成任务后就关闭浏览器的话,可以在exit的时候直接pass处理,如果需要立即关闭浏览器的话,可以选择在exit函数内填入driver.close()

class SeleniumDriver:
    def __enter__(self):
        return driver

    def __exit__(self, exc_type, exc_val, exc_tb):
        pass

4. 注意事项与小结

4.1 相关教程

4.2 课程小结

在本周的课程中,我们介绍了如何使用Airtest-selenium在微信读书web端上模拟阅读书籍的操作,也分享了Airtest-selenium比较常见的获取滑动距离、计算滑动距离以及判断是否到底部的用法。但是,请大家注意,我们的分享仅供学习参考哦!我们分享的代码并不是永远适用的,因为网页的页面元素可能会不断更新。

同时,我们也非常欢迎同学们能够提供自己常用场景的代码,我们会积极分享相关的使用技巧。让我们一起努力,共同进步~


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:526033840

标签:__,微信,driver,element,小课,window,div,Selenium,页面
From: https://www.cnblogs.com/AirtestProject/p/18260157

相关文章

  • Selenium - 入门指南
    入门指南如果你是Selenium的新手,我们有一些资源帮助你快速入门.Selenium通过使用 WebDriver 支持市场上所有主流浏览器的自动化。Webdriver是一个API和协议,它定义了一个语言中立的接口,用于控制web浏览器的行为。每个浏览器都有一个特定的WebDriver实现,称为驱动程......
  • Selenium - 概述
    了解组件使用WebDriver构建测试套件需要您理解并有效地使用许多不同的组件。就像软件中的一切一样,不同的人对同一个想法使用不同的术语。下面是在这个描述中如何使用术语的细分。专业术语API: 应用程序编程接口。这是一组用来操作WebDriver的“命令”。库: 一个代码......
  • selenium框架学习之获取文本框内容和Xpath元素不唯一
    本周一直写创建简历的测试用例,由于元素和内容过多,只能把各个方法单独封装,然后在测试用例里面使用,以此优化用例。在封装的时候遇到的一些问题,和大家说下怎么解决~1. 获取文本框输入---新增了一个【输入微信号】的功能模块,需要同时测试点击【同手机】和输入文本的功能。于是......
  • 基于微信小程序的商城系统
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • 免费调用微信推送接口
    注册测试公众号https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login扫码开通后,将会出现后台页面,拿到这四个值appIDappsecret接受消息者,扫码拿到openId,也就是接受者的id号template_id模板内容固定格式,演示的content是将要推送消息的key推送消息......
  • 微信小程序资源开发汇总
    本文收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。本文不是一篇关于如何学习微信小程序的入门指南,也非参考手册,只是一些资料的整理。本仓库中的资料整理自网络,也有一些来自网友的推荐:如果对你有帮助的话麻烦大家支持一下目录官方文档工具插件组件......
  • 微信小程序识别身份证 (一)
    方法介绍:通过调用接口的方式进行实现原生微信小程序识别身份证官方文档:身份证识别,获取接口调用凭据实现步骤如下:1.首先要在微信的app.json下面配置允许访问相机"permission":{"scope.userLocation":{"desc":"你的位置信息将用于小程序位......
  • 微信小程序毕业设计-教学质量评价系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序源码-基于Java后端的教学质量评价系统的计算机毕业设计(附源码+论文)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序touchstart影响tap的解决方法
    想给我的小程序做一个悬浮球组件,用来进行某些配置设置。但是悬浮球做好后,发现拖拽可以,但是tap事件无法触发。百度了一下,以下是官方的解释 然后看了一下其他人的解决方案,发现太麻烦(毕竟不是专业前端)。于是想了下既然不能共存,那我就判断拖拽的位移嘛,看下能不能实现。通过对t......