栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【对于大学习的研究】(最新)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【对于大学习的研究】(最新)

 

殺 博客首页:knighthood2001

 欢迎点赞评论️

❤️ 热爱python,期待与大家一同进步成长!!❤️


        如何实现:通过selenium模块进行省市的选择,倍速播放,题目的答题,最后保存图片至桌面。


目录

1模块准备

2定义桌面路径函数

3驱动浏览器

4省市选择 

5“开始学习”

6全部代码展示


1模块准备
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import winreg
from selenium.webdriver.common.by import By

Select用来进行下拉框的选择,winreg用来获取桌面路径。


2定义桌面路径函数

笔者之前写过详细的内容,如下链接

python生成桌面路径(winreg)

以下是所需要的具体代码模板,照抄使用即可。

def desktop_path():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders')
    desktop = winreg.QueryValueEx(key, "Desktop")[0]
    # print(desktop)
    return desktop

3驱动浏览器

        selenium操作浏览器需要有ChromeDriver驱动来协助。具体安装及使用教程,本文就不细述了。

url = input('请输入网址:')
# https://h5.cyol.com/special/daxuexi/cod4a2tb5v/index.html
driver = webdriver.Chrome()
driver.get(url)
# 窗口最大化,便于操作
driver.maximize_window()
time.sleep(1)
# 进入iframe
driver.switch_to.frame(0)
driver = webdriver.Chrome()表示声明chrome浏览器
driver.get(url)表示用get()方法打开url
driver.maximize_window()表示窗口最大化,便于后续操作

接下来注意看,大学习页面中视频内容是嵌套在iframe中,因此我们要是需要定位视频中相应元素,就需要切换到该iframe。

# 进入iframe
driver.switch_to.frame(0)
driver.switch_to.frame(el/index),即它可以使用索引,因为该iframe是第一个出现的,所在位置为0。 

4省市选择 

接下来出现需要选择省市,使用Select()函数,括号中进行元素下拉框位置的定位,然后再进行

Select().select_by_visible_text('浙江省')

即通过具体文本内容进行选择下拉框选项,当然也可以根据value值进行选择。 

同理,市的选择也是如此方法。

Select(driver.find_element(by=By.CSS_SELECTOR, value='#city')).select_by_visible_text('绍兴市')

选择好之后,定位确定按钮并点击即可。

driver.find_element(by=By.XPATH, value='/html/body/div[2]/div[8]/div[3]').click()

具体代码如下:

Select(driver.find_element(by=By.CSS_SELECTOR, value='#province')).select_by_visible_text('浙江省')
# time.sleep(1)
Select(driver.find_element(by=By.CSS_SELECTOR, value='#city')).select_by_visible_text('绍兴市')
# time.sleep(1)
# 确定按钮
driver.find_element(by=By.XPATH, value='/html/body/div[2]/div[8]/div[3]').click()

5“开始学习”

代码如下:

# 开始学习
driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section0.topindex.ani > div.start_btn.on').click()
# ②倍速播放
time.sleep(2)
driver.execute_script("document.querySelector('video').playbackRate = 15.0;")
# ③
while True:
    try:
        # 是否出现题目
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1')
        time.sleep(0.1)
        # 选A
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1 > div.w1.option').click()
        time.sleep(0.1)
        # 确认按钮
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1 > div.button').click()
        # 继续学习
        time.sleep(2.5)
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1 > div.continue').click()
        # 15倍速
        driver.execute_script("document.querySelector('video').playbackRate = 15.0;")
    except:
        pass
    # ④
    try:
        if driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section3.topindex2'):
            time.sleep(1)
            a = time.time()
            # driver.get_screenshot_as_file(r'C:UsersknighthoodOneDrive桌面{}.png'.format(a))
            driver.get_screenshot_as_file(r'{}{}.png'.format(desktop_path(), a))
            break
    except:
        pass
driver.close()

讲解:

①首先定位“开始学习”按钮并点击

②接下来driver.execute_script()执行JS代码

driver.execute_script("document.querySelector('video').playbackRate = 15.0;")
document.querySelector()为选择器,可以根据class进行选择,然后用playbackRate将播放速度改为15倍。

③接下来就判断是否出现题目,如果出现,选择A(因为题目作答是否正确对结果没啥影响,因此随意找个选项进行选择即可)。无论是否做对,最后都会出现继续听讲按钮,因此需要点击该按钮。 

④最后如果出现完成学习的页面(如下图) ,则截图(以时间戳命名)保存至桌面。

    try:
        if driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section3.topindex2'):
            time.sleep(1)
            a = time.time()
            # driver.get_screenshot_as_file(r'C:UsersknighthoodOneDrive桌面{}.png'.format(a))
            driver.get_screenshot_as_file(r'{}{}.png'.format(desktop_path(), a))
            break
    except:
        pass

⑤最后关闭浏览器即可。

driver.close()

注意:如果觉得用while True:try...except来判断元素是否能找到,大家可以去尝试一下element.is_display()函数来判断元素是否可见,如果可见,则进行后续操作。 


6全部代码展示
# -*- coding: utf-8-*-
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import winreg
from selenium.webdriver.common.by import By


def desktop_path():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders')
    desktop = winreg.QueryValueEx(key, "Desktop")[0]
    # print(desktop)
    return desktop

url = input('请输入网址:')
# https://h5.cyol.com/special/daxuexi/cod4a2tb5v/index.html
driver = webdriver.Chrome()
driver.get(url)
# 窗口最大化,便于操作
driver.maximize_window()
time.sleep(1)
# 进入iframe
driver.switch_to.frame(0)

time.sleep(1)
# 根据文本
Select(driver.find_element(by=By.CSS_SELECTOR, value='#province')).select_by_visible_text('浙江省')
# time.sleep(1)
Select(driver.find_element(by=By.CSS_SELECTOR, value='#city')).select_by_visible_text('绍兴市')
# time.sleep(1)
# 确定按钮
driver.find_element(by=By.XPATH, value='/html/body/div[2]/div[8]/div[3]').click()

# 开始学习
driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section0.topindex.ani > div.start_btn.on').click()
# 倍速播放
time.sleep(2)
driver.execute_script("document.querySelector('video').playbackRate = 15.0;")

while True:
    try:
        # 是否出现题目
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1')
        time.sleep(0.1)
        # 选A
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1 > div.w1.option').click()
        time.sleep(0.1)
        # 确认按钮
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1 > div.button').click()
        # 继续学习
        time.sleep(2.5)
        driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section1.topindex1 > div.continue').click()
        # 15倍速
        driver.execute_script("document.querySelector('video').playbackRate = 15.0;")
    except:
        pass
    try:
        if driver.find_element(by=By.CSS_SELECTOR, value='body > div.container > div.section3.topindex2'):
            time.sleep(1)
            a = time.time()
            # driver.get_screenshot_as_file(r'C:UsersknighthoodOneDrive桌面{}.png'.format(a))
            driver.get_screenshot_as_file(r'{}{}.png'.format(desktop_path(), a))
            break
    except:
        pass
driver.close()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/858518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号