苦蓝 2023-06-28 17:33 采纳率: 60%
浏览 29
已结题

Python 模块By导入失败?

Python爬虫爬取m3u8流媒体加密视频并定位iframe

无法导入By以致无法定位ifame

1、先解析网页并定位iframe

from selenium.webdriver.chrome.options import Options #(这个需要前提引入的,就想时间等待一样)
import requests
import threading
from bs4 import BeautifulSoup
import re
from selenium import webdriver
import selenium.webdriver.common.by import By
import os
import warnings
warnings.simplefilter('ignore',ResourceWarning)
url = 'http://www.zhirongedu.com/vodplay/46967-1-1.html'
# 开启无头模式提取视频m3u8路径地址
ch_options = Options()
ch_options.add_argument('--headless')
driver =  webdriver.Chrome(chrome_options=ch_options)
videoAnalysis = driver.get(url)
videoName = driver.title   # 获取当前页面title值
print(videoName)

def find_all_iframes(driver, name='WorkAreaFrame1'):
    iframes = driver.find_elements(by=By.XPATH, value = "//iframe")
    for index, iframe in enumerate(iframes):
        if iframe.get_attribute('name') == name:
            driver.switch_to.frame(iframe)
            # 需要执行的操作写在这里
            driver.switch_to.parent_frame()
            return
        else:
            driver.switch_to.frame(index)
            find_all_iframes(driver, name)
            driver.switch_to.parent_frame()
videoSrcAll = find_all_iframes(driver, name='WorkAreaFrame1')
print(videoSrcAll)
driver.close()


2、找到流媒体m3u8真实链接

# 链接分割取出真正的m3u8
videoSrc = str(url).split('=')[1]   # 取出“=”分割的右半部分
print(videoSrc)   # 输出我们所需的url
html = requests.get(videoSrc).text
print(html)   # 输出我们所需的url的内容
#html=r.text#储存到的信息以text呈现
soup=BeautifulSoup(html,'html.parser')#解析数据
getShortSrc = html.split('\n')[2]   # 获取文件第三行内容
print(getShortSrc)
noindexurl = url.replace('index.m3u8', '\s')   # 删除url的index.m3u8
trueUrl = noindexurl + getShortSrc   # 得到m3u8二次链接(真正的m3u8链接)
print(trueUrl)

3、以text文本呈现

res1 = requests.get(trueUrl).text
print(res1)

4、列出js列表

tslist = re.findall('EXTINF:(.*),\n(.*)\n#', res1)  # 得到每一个ts视频名称
newlist = []
for i in tslist:
    newlist.append(i[int])   # 将ts视频名称添加到列表中
print(newlist)   # 输出列表
noindextrueurl = trueUrl.replace('index.m3u8', '\s')  # 删除trueurl的index.m3u8
tslisturl = []   # 构造链接空列表
for i in newlist:
    tsurl = noindextrueurl + i
    tslisturl.append(tsurl)
print(tslisturl)  # 输出列表


5、解密下载并储存

def downloadvideo(tslisturl, videoName):
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
    }
    path = './' + videoName.strip() + ".mp4"
    videolen = len(tslisturl)

    for i in tslisturl:
        print("视频下载中...剩余" + str(videolen) + "个ts视频未下载!")
        videolen = videolen - 1
        r = requests.get(i, header).content
        videoName = i[-9:-3] + '.ts'
        if os.path.exists(folder ):
         continue
        with open(folder, 'ab+') as f:
            f.write(r.content)
            
        tslisturl = f.readlines()
        f.close()
    count=0
    for i in tslisturl:
     if "#" not in i:
        i = i.replace("\n","\s")
        n = i[-7:]
        threading.Thread(target=downloadvideo, args=(noindextrueurl+""+i,"cdzj2/"+str(n),)).start()
        downloadvideo(noindextrueurl+""+i,"cdzj2/"+str(count)+".ts")
    print("视频下载完毕!")
    download_file = "G:\Desktop"
    folder = os.path.exists(download_file + '/' + path)
    if not folder:
     os.makedirs(download_file + '/' + path)
    folder = download_file + '/' + path


定位iframe运行结果

 File "d:\mypycode\TEST\.vscode\film1.py", line 7
    import selenium.webdriver.common.by import By
                                        ^^^^^^   
SyntaxError: invalid syntax


```

  • 写回答

5条回答 默认 最新

  • CF2301_77400554X 2023-06-28 17:42
    关注

    引用chatgpt内容作答:
    根据您提供的代码和错误信息,问题出在以下这行代码上:

    import selenium.webdriver.common.by import By
    

    正确的导入语句应该是:

    from selenium.webdriver.common.by import By
    

    请将导入语句修改为上述形式,然后再次尝试运行您的代码。这样应该就能够成功导入 By 模块,并定位 iframe。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月28日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,