selenium基本操作-cookie,页面等待,页面切换,对话框,设置代理

Selenium的基本操作-cookie操作

  1. 获取所有的cookiefor cookie in driver.get_cookies(): print(cookie)
  2. 根据cookie的key 获取value: value = driver.get_cooke(key)
  3. 删除所有的cookie: driver.deleta_all_cookies()
  4. 删除某个cookie:driver.delete_cookie(key)
  5. 添加cookie:driver.add_cookie({'name':'username','value':'abc'})
from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://www.baidu.com/')

for cookie in driver.get_cookies():
    print(cookie)      
 
cookie = driver.get_cookie('PSTM')      # 根据名字获取对应cookie
print(cookie)                # 获得字典的形式

driver.add_cookie({"name":"password","value":"111111"})    # 每一次打开都是新的页面,之前我们提交的数据都没有的
cookie1 = driver.get_cookie("password")         
print(cookie1)
driver.delete_cookie("password")
print("="*30)
cookie2 = driver.get_cookie("password")
print(cookie2)               # 输出 None

页面等待

现在的网页越来越多采用了Ajax技术,这样程序并不能确定何时某个元素完全加载出来了。如果实际页面等待的时间过长,导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出 Nullpointer 的异常。为了解决这个问题,提供了两种等待方式,一种是隐式等待,还有显式等待。

隐式等待:调用 driver.implicitly_wait。 那么在获取不可用的元素之前,会先等待10秒钟的时间,

driver.get("https://www.baidu.com/")
driver.implicitly_wait(10)            # 没有等待的话会立刻报错
driver.find_element_by_id("不存在的id")    # 等10秒后如果还是找不到就报错

显示等待:这个比较聪明的,可以指定时间和条件,如果在时间内条件成立就执行。。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait         # 显式等待需要的模块
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.12306.cn/index/") # 12306

WebDriverWait(driver,100).until(      # 条件
    EC.text_to_be_present_in_element_value((By.ID,"fromStationText"),"青岛")  # 出发地
)         # 文字出现在元素的属性上。。。 (定位,文本)

WebDriverWait(driver,100).until(
    EC.text_to_be_present_in_element_value((By.ID,"toStationText"),"北京")       # 目的地
)

btn = driver.find_element_by_id("search_one")
btn.click()      # 在你选中青岛,北京后,就会自动点击查询。。。。

until

method: 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not

与until相反,until是当某元素出现或什么条件成立则继续执行,

until_not是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述。

更多方法:感谢脑补连接
在这里插入图片描述

页面切换

有时候窗口中有很多tab页面,这是肯定是需要切换的,提供了一个叫 switch_to_window 来进行切换,具体切换到那个页面,可以从 driver.window_handles 中找到。

driver = webdriver.Chome()
driver.get("https://www.baidu.com/")  # 先打开百度

# 打开多窗口
driver.implicitly_wait(2)   # 等待两秒
driver.execute_script("window.open('https://www.douban.com/')")  # 再打开豆瓣   注意引号的使用啊
# 是没有专门的方法去打开多页面的,执行JavaScript的脚本语言来打开

print(driver.page_source)          # 获得网页的源代码  这个会返回百度的,而不是新打开的豆瓣网站

driver.switch_to.window(driver.window_handles[1])     # 切换窗口,window_handles页面对象,是一个列表
print(driver.page_source)  # 这个就会返回豆瓣的源代码了

对话框

首先区别下alert、window和伪装对话框:

alert,浏览器弹出框,一般是用来确认某些操作、输入简单的text或用户名、密码等,根据浏览器的不同,弹出框的样式也不一样,不过都是很简单的一个小框。在检查中是无法获取到该框的元素的,也就是说alert是不属于网页DOM树的。
Alert内置支持处理弹窗对话框的方法:

  • accept() :确认弹窗,用法:Alert(driver).appept()
  • authenticate(username,password) :将用户名和密码发送到authenticated对话框,隐含点击确定,用法- ---- driver.switch_to.alert.authenticate(‘username’,‘password’)
  • dismiss() :取消确认
  • send_keys(keysToSend) :将密钥发送到警报,keysToSend为要发送的文本
  • text :获取Alert的文本

window,浏览器窗口,点击一个链接之后可能会打开一个新的浏览器窗口,跟之前的窗口是平行关系(alert跟窗口是父子关系,或者叫从属关系,alert必须依托于某一个窗口),有自己的地址栏、最大化、最小化按钮等。这个很容易分辨。(例子就是上面的页面切换)

div伪装对话框,是通过网页元素伪装成对话框,这种对话框一般比较花哨,内容比较多,而且跟浏览器一看就不是一套,在网页中用检查能够获取到其的元素。div类对话框是普通的网页元素,通过正常的find_element就可以定位并进行操作。注意设置一定的等待时间,以免还未加载出来便进行下一步操作,造成NoSuchElementException报错。

设置代理

有时候频繁爬取一些网页,服务器发现的是爬虫后会封掉你的IP地址,,,所以我们就用小号啊。。。

from selenium import webdriver

options = webdriver.ChromeOptions()      # 配置
options.add_argument("--proxy-server=http://110.52.235.176:9999")
driver = webdriver.Chrome(chrome_options=options)  # 传入参数

driver.get("http://httpbin.org/ip")

补充

  1. webelement.get_property: 获取HTML官方属性对应的值
  2. webelement.get_attribute: 获取这个标签的某个属性(包括自定义的属性)的值。
  3. driver.screentshot: 获取当前页面上的截图,这个方法只能在driver上使用.。爬虫临死前最后一刻,那个页面长什么样。。。
driver.get('https://www.baidu.com/')
driver.save_screenshot('baidu.png')

上手很简单,要想在深入的朋友就去看源代码,或官方的帮助文档吧,,,,,,,,,,,,,,,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值