Python爬虫学习之selenium第二期

前期回顾

Python爬虫学习之selenium

本期目标

在经过第一期的selenium学习以后,已经可以对网页进行简单的操作了。本期目标在其基础上进一步的学习selenium操作。

进阶操作

延时等待

在selenium中,get方法在网页框架加载结束以后才会结束执行,如果我们在get方法执行结束之前获取网页的源代码,可能无法获取完整的代码。所以,需要等待网页加载完成以后在获取节点。
selenium有两种等待方式,一种是隐式等待,一种是显示等待。

隐式等待

代码如下:

from selenium import webdriver

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.baidu.com')
input1 = browser.find_element(By.ID, 'kw')
print(input1)

这里,我们使用了implicitly_wait方法实现了隐式等待。

显示等待

代码如下:

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

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, 'kw')))
print(input)

这里使用了WebDriverWait对象,指定最长等待时间是10s,赋值给wait变量,通过调用wait的util方法,传入等待条件。
presence_of_element_located代表节点出现,通过By.ID确定选择的节点。
此外,还有其他的等待条件,帮助选择节点。
这里只列出常用的几个条件。感兴趣的可以去查看官网文档。

presence_of_element_located  代表元素存在dom书中
visibility_of_element_located  代表元素存在dom书中,并可见
element_to_be_clickable  代表元素可点击
title_is  标题是某内容
text_to_be_present_in_element  某个节点文本值包含某文字
element_to_be_selected   代表节点可选择

前进和后退

selenium中使用forward方法实现前进,使用back方法实现后退。

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
print(browser.current_url)
browser.back()
print(browser.current_url)
browser.forward()
print(browser.current_url)
https://www.taobao.com/
https://www.baidu.com/
https://www.taobao.com/

Cookie

selenium可以对cookie进行操作,代码如下:

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# 查看cookie
print(browser.get_cookies())
# 添加cookie
browser.add_cookie({'name': 'name', 'domain': 'www.baidu.com', 'value': 'value'})
print(browser.get_cookies())
# 删除所有cookie
browser.delete_all_cookies()
print(browser.get_cookies())
[{'domain': '.baidu.com', 'expiry': 1717243943, 'httpOnly': False, 'name': 'ZFY', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'YLCG1dAAjYiKBmD3emL4M9:BsjRbEQJmjXYmaDQLBeM4:C'}, {'domain': '.baidu.com', 'expiry': 1685794343, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '8920a12k05a5246k0kahal0u1i7jn571n'}, {'domain': '.baidu.com', 'expiry': 1717243943, 'httpOnly': False, 'name': 'BAIDUID_BFESS', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'B64F1AE465879B7AA55A06CBDF934A8F:FG=1'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '38515_36546_38687_38541_38797_38610_38768_38817_38639_38765_26350_38623'}, {'domain': '.baidu.com', 'expiry': 1717243942, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': 'B64F1AE465879B7AA55A06CBDF934A8F:FG=1'}, {'domain': '.baidu.com', 'expiry': 1720267942, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': 'B64F1AE465879B7A83872B71EAD0397E'}, {'domain': '.baidu.com', 'expiry': 1720267942, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1685707943'}, {'domain': 'www.baidu.com', 'expiry': 1686571943, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1'}]
[{'domain': '.baidu.com', 'expiry': 1717243943, 'httpOnly': False, 'name': 'ZFY', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'YLCG1dAAjYiKBmD3emL4M9:BsjRbEQJmjXYmaDQLBeM4:C'}, {'domain': '.baidu.com', 'expiry': 1685794343, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '8920a12k05a5246k0kahal0u1i7jn571n'}, {'domain': '.baidu.com', 'expiry': 1717243943, 'httpOnly': False, 'name': 'BAIDUID_BFESS', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'B64F1AE465879B7AA55A06CBDF934A8F:FG=1'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '38515_36546_38687_38541_38797_38610_38768_38817_38639_38765_26350_38623'}, {'domain': '.baidu.com', 'expiry': 1717243942, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': 'B64F1AE465879B7AA55A06CBDF934A8F:FG=1'}, {'domain': '.www.baidu.com', 'httpOnly': False, 'name': 'name', 'path': '/', 'sameSite': 'Lax', 'secure': True, 'value': 'value'}, {'domain': '.baidu.com', 'expiry': 1720267942, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': 'B64F1AE465879B7A83872B71EAD0397E'}, {'domain': '.baidu.com', 'expiry': 1720267942, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1685707943'}, {'domain': 'www.baidu.com', 'expiry': 1686571943, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1'}]
[]

标签页管理

访问网页的时候,可能会打开多个标签页,我们可以使用

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
browser.switch_to.window(browser.window_handles[1])
browser.get('https://www.taobao.com')
print(browser.window_handles)
['EBEF1C5B75A2FA71CE251DAA95A462A3', 'DA250345DBD74CEA653B575282C8C71E']

在这里,我们使用js代码打开一个新的标签页,然后使用window_handles属性获取浏览器的所有的标签页,之后使用switch_to.window来选择标签页。之后就可以对这个标签页进行操作了。

无头模式

所谓的无头模式就是使代码运行时,不再弹出一个浏览器窗口。代码如下:

option = webdriver.ChromeOptions()
option.add_argument('--headless')
browser = webdriver.Chrome(options=option)
browser.get('https://www.baidu.com')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值