selenium来写自动化远程教育

selenium来写自动化远程教育

一、利用webdriver来启动chrome,这里涉及webdriver的安装。

1.安装的webdriver需要和chrome的版本对应,并且要设置环境变量。

2.启动参数,chrome_options = Options(),有时候会崩溃,要使用–no-sandbox参数,options参数很多。可以百度一下学习。

3.如果想获取chrome的network和console参数,还要设置

self.browser = webdriver.Chrome(options=chrome_option,desired_capabilities=capabilities)

直接用performance来获取
根据Chrome驱动程序75的发行说明中的规定,功能loggingPrefs已重命名为goog:loggingPrefs ,这是W3C标准所要求的。 因此,设置功能的代码应该进行调整,至少由于日志捕获原因,没有必要退回到非w3c模式。

d[‘goog:loggingPrefs’] = { ‘performance’:‘ALL’ }

chrome 75及其chromedriver存在相同的问题,将“ w3c”设置为False可解决此问题:


from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options

d = DesiredCapabilities.CHROME
d['loggingPrefs'] = { 'performance':'ALL' }

chrome_options = Options()
chrome_options.add_experimental_option('w3c', False)

    #caps = webdriver.DesiredCapabilities().CHROME
  #     caps = {
    #     'browserName': 'chrome',
    #     'goog:loggingPrefs': {  --这个参数是个坑,上面有解释。
    #         'browser': 'ALL',
    #         'driver': 'ALL',
    #         'performance': 'ALL',
    #     },
    #     'goog:chromeOptions': {
    #         'perfLoggingPrefs': {
    #             'enableNetwork': True,
    #         },
    #         'w3c': False,
    #     },
    # }
driver = webdriver.Chrome(desired_capabilities=d, options=chrome_options)

4.日志比较大,请参照performance.json,checkwatch.json()二个文件了解结果再作分析。

5.能取得network的request,可是日志没办法取得返回的结果,这个时候可以变通一下,利用日志把request的headers记录下来,用request库来
模拟一次发包就可以拿到response的内容。要取什么东西用chrome的network调试一下,拿到ajax运行的js文件。在开发者界面resource里面,分析一下js文件,就清楚了他会发送什么包。

二、模拟登录的验证码问题

1.利用tensorflow来分析验证码,人工智能分析。安装tensorflow非常多坑。其实打码网站简单,可是都要钱。

2.安装tnesorflow太多坑,参照tensorflow安装笔记。

三、chrome设置flash的问题,因为chrome不支持flash播放,要设置后才能观看,好多网站还是用flash播放视频的。

本以为很简单,打开页面直接找到按键设置就是了,可是这些chrome的设置界面全是shadow-root,全是隐藏起来的。

    #显示shadow-roo层
    def expand_root_element(self, element):
        return self.browser.execute_script("return arguments[0].shadowRoot", element)
		setchromeflash.py
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select

class chromeDriver():

    def __init__(self, driver = ''):
        # 设置窗口大小
        self.window_width  = 1680
        self.window_height = 948
        # 设置 chromedriver 位置
        self.executable_path = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
        # 设置 Flash 的路径
        self.flash_path     = ''
        # 获取 driver
        if driver: self.driver = driver
        else:
            self.driver = self.get_chrome_driver()
        

    def get_chrome_driver(self):
        # 头部
        user_agent         = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
        # 创建参数对象
        options         = webdriver.ChromeOptions()

        prefs = {
            # 开启图片
            "profile.managed_default_content_settings.images":1,
            # 关闭 Notification
            "profile.default_content_setting_values.notifications": 2,
        }

        # 设置 Flash 的路径
        options.add_argument('--ppapi-flash-version=32.0.0.171')
        options.add_argument('--ppapi-flash-path=' + self.flash_path)
        options.add_argument('binary_location=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')
        # 指定屏幕分辨率
        options.add_argument('window-size=' + str(self.window_width) + 'x' + str(self.window_height) + '\'')
        # 最大化窗口
        options.add_argument('--start-maximized')
        # 规避bug
        options.add_argument('--disable-gpu')
        # 禁用弹出拦截
        options.add_argument('--disable-popup-blocking')
        # 隐藏自动软件
        options.add_argument('disable-infobars')
        # 设置中文
        options.add_argument('lang=zh_CN.UTF-8')
        #忽略 Chrome 浏览器证书错误报警提示
        options.add_argument('--ignore-certificate-errors')
        # 更换头部
        options.add_argument('user-agent=' + user_agent)
        options.add_argument('no-default-browser-check')
        # 关闭特征变量
        options.add_experimental_option('excludeSwitches', ['enable-automation'])
        options.add_experimental_option('prefs', prefs)
        # 创建 Chrome 对象
        driver     = webdriver.Chrome(options = options)

        return driver

    def get(self, web_url):
        if not web_url: return False
        return     self.driver.get(web_url)

    def add_flash_site(self, web_url):
        print("get")
        if not web_url: return False
        self.get("chrome://settings/content/siteDetails?site=" + web_url)
        root1 = self.driver.find_element(By.TAG_NAME, "settings-ui")
        shadow_root1 = self.expand_root_element(root1)
        root2 = shadow_root1.find_element(By.ID, "container")
        root3 = root2.find_element(By.ID, "main")
        shadow_root3 = self.expand_root_element(root3)
        shadow_root3 = self.expand_root_element(root3)
        root4 = shadow_root3.find_element(By.CLASS_NAME, "showing-subpage")
        shadow_root4 = self.expand_root_element(root4)
        root5 = shadow_root4.find_element(By.ID, "advancedPage")
        root6 = root5.find_element(By.TAG_NAME, "settings-privacy-page")
        shadow_root6 = self.expand_root_element(root6)
        root7 = shadow_root6.find_element(By.ID, "pages")
        root8 = root7.find_element(By.TAG_NAME, "settings-subpage")
        root9 = root8.find_element(By.TAG_NAME, "site-details")
        shadow_root9 = self.expand_root_element(root9)
        root10 = shadow_root9.find_element(By.ID, "plugins")
        shadow_root10 = self.expand_root_element(root10)
        root11 = shadow_root10.find_element(By.ID, "permission")
        Select(root11).select_by_value("allow")

    def expand_root_element(self, element):
        return self.driver.execute_script("return arguments[0].shadowRoot", element)


    def get_flash_url(self, web_url):
        if not web_url: return False
        self.add_flash_site(web_url)
        self.get(web_url)

    def quit_driver(self):
        self.driver.quit()


driver=chromeDriver()
driver.get_flash_url("www.baidu.com")

一层层找,真是头痛,可以用以下方法实现:

利用pyautogui启动页面后直接一波键盘操作,可行,可是不能后台。

self.browser.get("chrome://settings/content/siteDetails?site=http%3A%2F%2Fsjjy.gdsf.gov.cn")
        # time.sleep(3)
        # for i in range(16):
        #     pyautogui.press(['tab'])   # 按下 5 * 9 = 45 次正好到更改
        # pyautogui.press('enter')
        # time.sleep(1)
        # pyautogui.press(['down'])
        # time.sleep(1)
        # pyautogui.press('enter')
        # time.sleep(1)
#这里直接用selenium模拟键盘也行
        root1 = self.browser.find_element(By.TAG_NAME, "settings-ui")
        
        for i in range(16):
            root1.send_keys(Keys.TAB) 
        time.sleep(2)
        root1.send_keys(Keys.ENTER)
        root1.send_keys(Keys.DOWN)
        root1.send_keys(Keys.ENTER)
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值