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

 🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝

🥰 博客首页: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'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 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:\Users\knighthood\OneDrive\桌面\{}.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:\Users\knighthood\OneDrive\桌面\{}.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'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell 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:\Users\knighthood\OneDrive\桌面\{}.png'.format(a))
            driver.get_screenshot_as_file(r'{}\{}.png'.format(desktop_path(), a))
            break
    except:
        pass
driver.close()

  • 34
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 45
    评论
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

knighthood2001

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值