本文中使用的driver对象为 driver = webdriver.Chrome()
获得的
如果对基本语法还不太了解建议看一下
Python中使用Selenium(一)环境安装
Python中使用selenium(二)基本语法
在使用爬虫时,难免会遇到像登录验证码等问题,而有时候使用人工登录后,手动输入里面的Cookie可以直接免去登录的问题,也是曲线救国的方案
driver.get_cookies()
通过该方法可以获得cookie
driver.add_cookie(cookie)
通过该方法可以向浏览器中添加cookie
以下是向浏览器中添加cookie的实际代码
里面的cookies数组是之前录入的cookies数组,格式类似浏览器中的cookie
# 拼接Cookie
for item in cookies :
print(item)
cookie= {}
cookie['name']=item['name']
cookie['value']=item['value']
cookie['expires']=""
cookie['path']="/"
if item['name'] == "BZR_ID":
cookie['path'] = "/pcenter"
cookie['httpOnly']=False
cookie['HostOnly']=False
cookie['Secur']=False
driver.add_cookie(cookie)
无头浏览器就是没有界面的浏览器,可以更快的响应,减少渲染导致的卡顿
以及防止打印一些没有用的日志
例如 : ERROR:device_event_log_impl.cc(211)] [09:58:16.192] USB: usb_device_handle_win.cc:1020 Failed to read descriptor from node connection: 连到系统上的设备没有发挥作用。 (0x1F)
option = webdriver.ChromeOptions()
# 隐藏窗口
option.add_argument('headless')
# 防止打印一些无用的日志
option.add_experimental_option("excludeSwitches", ['enable-automation','enable-logging'])
driver = webdriver.Chrome(chrome_options=option)
在有些极端情况下,我们可能会调用chrome的插件,或者要使用用户数据,解决办法是将Chrome用户目录复制一份用于selenium使用,在代码中指定用户目录
C:\Users\{用户名}\AppData\Local\Google\Chrome\User Data
C:\Users\11415\AppData\Local\Google\Chrome\User_Data_PY
option = webdriver.ChromeOptions()
# 将Chrome的用户数据复制一份 TODO 配置Chrome用户目录
option.add_argument("--user-data-dir="+r"C:/Users/11415/AppData/Local/Google/Chrome/User_Data_PY/")
driver = webdriver.Chrome(chrome_options=option)
这样就可以启动的时候用户数据,以及原浏览器的插件都可以带过来了
关于里面的坑
指定用户目录后,一个用户目录只能打开一个Chrome,打开第二个时候会出错,目前是如果打开多个,再复制一份用户数据
我在浏览器中初始化了一个chrome的视频加速插件,但是页面展示了#shadow-root
元素,当时使用各种选择器都无法选中该插件
解决办法
首先获取他的父元素,然后调用js将父元素传参过去来获得shadowsRoot元素
fastDiv = driver.find_element_by_xpath("//div[@class='vsc-controller']")
shadowRoot = driver.execute_script("return arguments[0].shadowRoot", fastDiv)