一、selenium和chromedriver的安装配置
1、下载selenium
pip install selenium
2、下载chromedriver
https://npmmirror.com/
chromedriver 版本和 chrome 版本要一致
3、简单使用案例
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
# 取消Chrome提示受到自动软件控制的提示
options.add_argument('disable-infobars')
'''
有的版本chrome需要下面代码取消自动软件控制提示
options.add_experimental_option('useAutomationExtension', False)
options.add_experimental_option("excludeSwitches", ['enable-automation'])
'''
# 最大窗口打开
options.add_argument('--start-maximized')
# 取消沙盒模式
options.add_argument('--no-sandbox')
# 创建驱动
driver = webdriver.Chrome(options=options)
# chrome浏览器打开百度主页
driver.get('http://www.baidu.com')
# 休眠3秒
time.sleep(3)
# 打印当前页url
print(driver.current_url)
# 打印源码
print(driver.page_source)
# 关闭浏览器
driver.quit()
4、注意事项
-
配置 chromedriver,把chromedriver.exe文件夹添加到环境变量Path里。
-
在chrome浏览器快捷方式点右键——属性——目标,添加' --allow-running-insecure-content'。
二、driver对象的常用属性和方法
- driver.current_url # 当前url
- driver.page_source # 浏览器渲染后的网页源码
- driver.close() # 关闭当前标签页,只有一个关闭浏览器
- driver.quit() # 关闭浏览器
- driver.forward() # 页面前进
- driver.back() # 页面后退
- driver.save_screenshot(img_name) # 页面截图
三、driver对象定位标签元素获取标签对象的方法
-
find_element()
-
find_elements()
方法有两个参数,第一个参数可使用 'id' 或者 By.ID,使用By.ID需要引入 from selenium.webdriver.common.by import By
find_element返回一个元素对象,找不到报错,find_elements返回一个列表,找不到为空列表,长度为0。返回的是selenium.webdriver.remote.webelement.WebElement 对象。
# 在百度的搜索框中输入 selenium
driver.find_element(by=By.ID, value='kw').send_keys('selenium')
# 点击百度的搜素按钮
driver.find_element('id', 'su').click()
-
selenium.webdriver.remote.webelement.WebElement的属性方法
element.text # 获取文本
element.get_attribute("属性名") # 获取属性值
element.click() # 单击
elemnet.send_keys("") # 输入文本 ,针对 text input 标签
elemnet.clear() # 输入框清空
四、selenium 的其他操作
1、selenium 标签页的切换
-
获取所有窗口页的窗口句柄
current_windows = driver.window_handles
-
切换标签页
driver.switch_to.window(current_windows[1])
driver.get('http://www.baidu.com') driver.find_element(By.PARTIAL_LINK_TEXT, value="hao123").click() time.sleep(2) # 获取全部标签页的句柄 current_windows = driver.window_handles # 打印当前url print(driver.current_url) # 打印当前句柄 print(driver.current_window_handle) # 切换标签页 driver.switch_to.window(current_windows[1]) # 打印当前url print(driver.current_url) # 打印当前句柄 print(driver.current_window_handle) # 退出 driver.quit()
2、selenium 切换frame 标签
很多登录窗口使用frame,如果不切换到frame,无法登录成功
- el_frame = driver.find_element()
- driver.switch_to.frame(el_frame)
3、selenium对cookie的处理
-
获取当前标签页的cookie信息
driver.get_cookies()
-
把cookies转化为字典
cookies_dict = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
# 获取当前标签页的cookies driver.get_cookies() # 把cookies转换为字典对象 cookies_dict = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
-
删除cookie
# 删除名为'ZFY'的cookie driver.delete_cookie('ZFY') # 删除全部cookie driver.delete_all_cookies()
4、控制浏览器执行js代码
driver.execute_script()
例如:让网页滚动条向下滚动。
driver.execute_script('scrollTo(0,1000)')
5、页面等待
-
强制等待 time.sleep()
-
隐式等待 针对元素定位,在一定时间内判断元素是否定位成功, 如果完成了就下一步,在设置时间内没有成功,会报超时加载,代码:driver.implicitly_wait(10),最长等待10秒。一次设置,全局生效。
-
显示等待 当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception。
需要引入下列模块
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
6、开启无界面模式
# 开启无界面模式
options.add_argument('--headless')
# 配置对象禁用gpu
options.add_argument('--disable-gpu')
7、使用代理IP
options.add_argument('--proxy-server=http://IP:端口')
标签:教程,selenium,driver,cookies,current,cookie,options
From: https://blog.51cto.com/u_16109758/6390372