• Python Selenium框架


    1. selenium介绍

    # 介绍: 
    1.selenium是一个web自动化测试用的框架. 程序员可以通过代码实现对浏览器的控制, 比如打开网页, 点 击网页中的元素, 实现鼠标滚动等操作. 
    2.它支持多款浏览器, 如谷歌浏览器, 火狐浏览器等等, 当然也支持无头浏览器. 
    # 目的: 
    在爬取数据的过程中, 经常遇到动态数据加载, 一般动态数据加载有两种, 一种通过ajax请求加载数据, 另 一种通过js代码加载动态数据. selenium可以模拟人操作真实浏览器, 获取加载完成的页面数据
    
    ajax:
        url有规律且未加密, 直接构建url连接请求 
        url加密过无法破解规律 --> selenium 
    js动态数据加载 --> selenium
    

    2. selenium安装

    三要素: 浏览器, 驱动程序, selenium框架 
        浏览器: 推荐谷歌浏览器, 标准稳定版本 驱动程序:http://chromedriver.storage.googleapis.com/index.html
    
    pip install selenium 
                    
    # 测试: 
    from selenium import webdriver 
    browser = webdriver.Chrome('./chromedriver.exe') # 将驱动放在脚本所在的文件夹 
    browser.get('https://www.baidu.com')
    

    3. selenium常用操作

    # 实例化浏览器对象: 
    from selenium import webdriver 
    browser = webdriver.Chrome('driverpath') ----->(跟插件的地址)
    
    # 发送get请求: 
    browser.get('https://www.baidu.com')
    browser.get('https://image.baidu.com')
    
    browser.page_source
    
    # 获取网页的数据: browser.page_source ---> str类型 
    # 获取页面元素: 
    find_element_by_id:根据元素的id 
    
    find_element_by_name:根据元素的name属性 
    
    find_element_by_xpath:根据xpath表达式 
    
    find_element_by_class_name:根据class的值(如果class中的属性是多值,有空格,会出错)
    
    find_element_by_css_selector:根据css选择器
    
    find_element_by_xpath("//*[contains(text(), '{}')]".format(a2.strip())).click()  # 根据包含该字体的进行抓取,缺点只会抓取第一次出现的,尽量跟据页面唯一id抓取
                    
    # 节点交互操作: 
    click(): 点击 
    send_keys(): 输入内容 
    clear(): 清空操作 
    execute_script(js): 执行指定的js代码 
    # JS代码: window.scrollTo(0, document.body.scrollHeight)可以模拟鼠标滚动一屏高度 
    quit(): 退出浏览器 
    
    
    # frame 
    # 若爬取一个页面,需观察如果有两个HTML(一个父HTML,一个子HTML),所需内容在子HTML中,则需要switch_to.frame('frameid') 转至子页面继续操作
    
    switch_to.frame('frameid')                
    

    3.1 selenium设置无头浏览器加代理

    from selenium import webdriver
    chrome_opt = webdriver.ChromeOptions()
    chrome_opt.add_argument(
        'user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"')   # 添加UA
    chrome_opt.add_argument('window-size=1200x1050')  # 设置窗口大小
    chrome_opt.add_experimental_option('excludeSwitches', ['enable-automation']) 
    chrome_opt.add_argument('blink-settings=imagesEnabled=false')
    chrome_opt.add_argument('--disable-infobars')
    chrome_opt.add_argument("--headless")      #使用无头浏览器
    chrome_opt.add_argument('--disable-gpu')      # 禁用gpu
    chrome_opt.add_argument('--no-sandbox')
    chrome_opt.add_argument("--proxy-server=%s" % func1(ip_list))   # 使用添加代理
    browser = webdriver.Chrome(
        executable_path="./chromedriver.exe",
        options=chrome_opt)
    
    

    4. QQ空间模拟登陆

    from selenium import webdriver
    import time
    # 实例化浏览器对象
    browser = webdriver.Chrome('./chromedriver.exe')
    # 打开qq空间登陆页面
    browser.get('https://qzone.qq.com/')
    time.sleep(1)
    # 转至frame子页面
    browser.switch_to.frame('login_frame')
    # 获取密码登陆选项并点击
    a_tag = browser.find_element_by_id('switcher_plogin')
    a_tag.click()
    time.sleep(1)
    # 获取账号输入框并输入账号
    browser.find_element_by_id('u').clear()
    user = browser.find_element_by_id('u')
    user.send_keys('1816668038')
    time.sleep(1)
    # 获取密码输入框并输入密码
    browser.find_element_by_id('p').clear()
    pwd = browser.find_element_by_id('p')
    pwd.send_keys('1971628197192liu')
    time.sleep(1)
    # 获取登陆按钮并单击
    button = browser.find_element_by_id('login_button')
    button.click()
    
    
    
    
    '''
    微博模拟登陆
    '''''
    # import requests,time
    # from selenium import webdriver
    # broeser = webdriver.Chrome('./chromedriver.exe')
    # broeser.get('https://weibo.com/login.php')
    #
    # input_tag = broeser.find_element_by_id('loginname')
    # input_tag.clear()
    # input_tag.send_keys('15135544556')
    # time.sleep(3)
    # input_tag_pwd = broeser.find_element_by_xpath('//div[@class="info_list password"]/div[@class="input_wrap"]/input')
    # input_tag_pwd.clear()
    # input_tag_pwd.send_keys('123456789liu')
    # time.sleep(3)
    # button_tag = broeser.find_element_by_xpath('//div[@class="W_login_form"]/div[@class="info_list login_btn"]/a')
    # button_tag.click()
    

    5. 图片懒加载

    '''
    网址 http://sc.chinaz.com/tupian/   站长素材
    图片懒加载
    '''''
    
    import requests
    from lxml import etree
    url = 'http://sc.chinaz.com/tupian/bingxueshijie.html'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
    }
    res = requests.get(url=url,headers=headers)
    tree = etree.HTML(res.text)
    
    #src2的位置,在必要的时候可以把值赋给src----懒加载核心
    
    ret = tree.xpath('//div[@id="container"]/div/div/a/img/@src2')
    
    for i in ret:
        comment = requests.get(url=i,headers=headers).content
        name = i.split('/')[-1]
        with open('./image/%s'% name,'wb') as f:
            f.write(comment)
    

    6. Python+Selenium 实现打开浏览器、定时刷新页面

    # 方法一
    import time
    from selenium import webdriver
    
    # driver = webdriver.Firefox()  打开火狐浏览器
    driver = webdriver.Chrome()   # 打开Chrome
    driver.maximize_window()    #最大化窗口
    driver.get('www.baidu.com')    #打开地址
    time.sleep(60)    #睡眠60s
    driver.refresh()    #刷新打开的页面
    driver.close()     #关闭浏览器
    
    # 方法二
    
    import time
    from selenium import webdriver
     
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(6)
     
    driver.get("https://www.baidu.com")
    time.sleep(2)
    try:
        driver.refresh() # 刷新方法 refresh
        print ('test pass: refresh successful')
    except Exception as e:
        print ("Exception found", format(e))
    driver.quit()
    
  • 相关阅读:
    django---url---03
    django---url---02
    django--url---路由分配3种情况
    pycharm导入.py文件报错
    django 常见环境问题
    python+appium+unittest 启动一次app,执行多条test
    查找夜神模拟器app的安装包
    Android_smali_代码注入
    vue uuid的使用
    vue_elementui_tab刷新保持当前状态
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12382235.html
Copyright © 2020-2023  润新知