zoukankan      html  css  js  c++  java
  • selenium实际使用

    1. 自动观看视频
    
    from builtins import print
    
    import time
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    
    # 打开网页
    browser = webdriver.Chrome()
    browser.get('http://xxx/')
    
    # 手动登陆
    for i in range(30):
        print('\r%d'%(30-i), end='', flush=True)
        time.sleep(1)
    print()
    
    
    # 切换到新的窗口
    handles = browser.window_handles
    browser.switch_to.window(handles[-1])
    
    
    now = lambda: time.time()
    start = now()
    reverse = True
    
    while True:
        # 视频列表
        # video_list =  browser.find_elements_by_class_name("f-ib w100 text-etc") # class复合属性不支持这么写
        # video_list = browser.find_elements_by_css_selector(".f-ib .w100 .text-etc")  # css中间也不能写空格的
        video_list = browser.find_elements_by_css_selector(".f-ib.w100.text-etc")  # css 支持找类class
        # 解决点击第一个a之后,页面出现刷新,再想点第二个就会报错
        video_num = len(video_list)
    
        if video_list:
            print('找到播放列表')
            for i in range(video_num):
                video_id = video_num-1-i if reverse else i
                video = browser.find_elements_by_css_selector(".f-ib.w100.text-etc")[video_id]
                #选择播放列表中的视频
                video.click()
                print('选择播放')
    
                # 视频播放按钮
                play_button = browser.find_element_by_css_selector(".vjs-big-play-button")
                # time.sleep(2)
                # play_button.click()
                is_visible = WebDriverWait(browser, 6).until(lambda driver: play_button.is_displayed())
                if is_visible:
                    play_button.click()
                    print('开始播放')
    
                # 等待视频结束按钮
                end_button = None
                # waite_50 = False
                start_time = now()
    
                while not end_button :
                    try:
                        end_button = browser.find_element_by_css_selector(".btn.btn-primary:not(.btnSubmitQuestion)")
                    except:
                        time.sleep(30)
                        print("视频没有结束,等待30s")
                        # 可能视频看完不会跳出弹框,50分钟后直接下一个视频
                        if int(now() - start_time) > 60*50:
                            break
                        else:
                            continue
                    else:
                        print("视频结束,退出循环")
                        time.sleep(10)
                        # 点击结束弹框
                        end_button.click()
    
            #遍历完播放列表就退出
            break
    
        else:
            if int(now() - start) < 60:
                time.sleep(10)
            # 一分钟没有找到视频列表,直接退出
            break
    
    
  • 相关阅读:
    计算1至n中数字X出现的次数
    DOM处理
    SQL Server中日志
    怎样玩转千万级别的数据
    协议的分用以及wireshark对协议的识别
    序列化json对象,通过ajax传入asp.net mvc后台
    新时代的Vim C++自动补全插件 clang_complete
    ASP.NET Web API 接口执行时间监控
    应用之星在线app开发平台,菜鸟也会做应用
    1.11 查找空值
  • 原文地址:https://www.cnblogs.com/amize/p/14425637.html
Copyright © 2011-2022 走看看