Selenium 的基本操作你知道哪些?
1. 前言
今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网站。
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 webdriverfrom selenium.webdriver.common.keys import Keysfrom airtest_selenium.proxy import WebChromefrom 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')# 打印URLprint(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_ / 1000print(heig_ / 1000)# 滚动到页面最下方driver.execute_script(f"window.scrollTo(0, {p_num + next_});")sleep(2)else:print('已滚动到屏幕最底部')break#管理 WebDriver 的生命周期class SeleniumDriver:def __enter__(self):return driverdef __exit__(self, exc_type, exc_val, exc_tb):passif __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 driverdef __exit__(self, exc_type, exc_val, exc_tb):pass
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取