• 23 - selenium的进阶


    Day 23

    一、selenium 使用代理ip和基本配置

    1.selenium 使用代理ip

    • 可以直接在selenium创建的浏览器对象中,更改设置中的ip地址,通过指定配置创建浏览器对象即可。
    
    from selenium.webdriver import Chrome, ChromeOptions
    
    # 1. 创建配置对象
    options = ChromeOptions()
    # 2. 添加配置
    options.add_argument('--proxy-server=http://1.514.915.139:4531')
    
    # 3.通过指定配置创建浏览器对象
    b = Chrome(options=options)
    
    b.get('https://movie.douban.com/top250')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.取消测试环境

    
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    
    
    • 1
    • 2
    • 3

    3. 取消图片加载

    
    options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
    
    b = Chrome(options=options)
    b.get('https://www.jd.com')
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    二、selenium 等待

    1.隐式等待

    • 如果没有设置隐式等待:在通过浏览器获取标签的时候,如果标签不存在会直接报错

    • 如果设置了隐式等待:在通过浏览器获取标签的时候,如果标签不存在会直接报错,不会马上报错,而是在指定时间范围内不断尝试重新获取标签,直到获取到标签或者超时为止(如果超时会报错);

    • 一个浏览器只需要设置一次隐式等待时间,它会作用于这个浏览器每次获取标签的时候。

    from selenium.webdriver import Chrome, ChromeOptions
    # 创建设置对象
    options = ChromeOptions()
    # 设置取消测试环境
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    # 设置取消图片加载
    options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
    
    b = Chrome(options=options)
    b.get('https://www.jd.com')
    # 1).设置等待时间
    b.implicitly_wait(5)
    print('===')
    
    # 2).获取标签的时候隐式等待时间才会生效
    input_tag = b.find_element_by_id('key')
    input_tag.send_keys('电脑')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.显示等待

    • 等到某个条件成立或者不成立为止

    • 首先创建等对象WebDriverWait(浏览器对象, 超时时间)

    • 添加等待条件

      • 等待对象.until(条件) :等到条件成立为止
      • 等待对象.until_not(条件) :等到条件不成立为止
    • 常用的条件:

      • presence_of_element_located(标签) - 指定标签出现
      • text_to_be_present_in_element_value(标签, 值) - 指定标签的value属性值中包含指定值
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # 等待10s  等到输入框输入电脑,就继续执行
    wait = WebDriverWait(b, 10)
    wait.until(EC.text_to_be_present_in_element_value((By.ID, 'key'), '电脑'))
    print('继续执行')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 等到页面中出现id值为J_goodsList里面class值为gl-i-wrap的div标签为止
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    wait = WebDriverWait(b, 10)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#J_goodsList div.gl-i-wrap')))
    print(b.page_source)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    .NET C#杂谈(1):变体 - 协变、逆变与不变
    蓝桥杯 枚举算法 (c++)
    C#实现 javascript中的 charCodeAt
    MIMO信道的随机性
    HTL6033是一款专用于3串锂电池或聚合物电池的保护芯片
    JSD-2204-MyBatis小结-SLF4j日志-SpringMVC-Day05
    vue2中watch监听的使用及immediate、handler和deep属性解读
    PHP使用 FormBuilder 创建表单
    ExtJS-介绍(Introduction to Ext JS)
    高效防汛决策:山海鲸可视化系统助力城市防洪
  • 原文地址:https://blog.csdn.net/Mr_suyi/article/details/126412622