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')

2.取消测试环境


options.add_experimental_option('excludeSwitches', ['enable-automation'])

3. 取消图片加载


options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})

b = Chrome(options=options)
b.get('https://www.jd.com')


二、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('电脑')

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('继续执行')

  • 等到页面中出现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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值