安装
pip install selenium
使用 (以chrome浏览器为例)
1.导入: from selenium import webdriver
方法一: 将下载好的chrome浏览器驱动文件加入到python目录下
browser = webdriver.Chrome() # 默认路径为python环境目录
方法二:指定chrome浏览器驱动文件路径
chromedriver = 'C:Program Files (x86)GoogleChromeApplicationchromedriver'
browser = webdriver.Chrome(chromedriver)
3.打开浏览器网页访问url
打开网页:
browser.get('https://www.taobao.com')
关闭网页窗口,并退出浏览器:
driver.close() # 关闭浏览器窗口
driver.quit() # 退出浏览器
4.获取元素
a. 获取单个元素:
find_element_by_name()是根据Name值获取
ind_element_by_id()是根据ID获取
find_element_by_xpath()是根据Xpath提取
find_element_by_css_selector('#xxx') # id : #xxx class: .xxx
driver.find_element_by_link_text('账号登录') # 通过链接的文本取元素
其他方法:
from selenium.webdriver.common.by import By
find_element_by_id(id)
就等价于find_element(By.ID, id)
find_element_by_css_selector('#xxx')
等价于find_elements(By.CSS_SELECTOR, '.service-bd li')
b.获取多个元素
find_elements_by_css_selector('#xxx li') # 根据id=xxx来获取下面的所有li的结果
5.前进后退
browser.back() #后退
time.sleep(1)
browser.forward() #前进
6.切换窗口
driver.execute_script('window.open()') # 执行js代码, window.open():打开一个空页面
browser.current_window_handl) # 当前窗口
browser.window_handles # 所有窗口列表
browser.switch_to.window(browser.window_handles[1]) #切换到指定窗口
7.模拟登陆CSDN
import time
from selenium import webdriver
driver = webdriver.Chrome() # chrome驱动文件在默认目录python目录下
driver.get('https://passport.csdn.net/login')
login = driver.find_element_by_link_text('账号登录') # 通过链接的文本取元素
login.click()
time.sleep(1)
username = driver.find_element_by_id('username')
username.send_keys('用户名') # 输入账号
pwd = driver.find_element_by_id('password')
pwd.send_keys('密码') # 输入密码
login_btn = driver.find_element_by_css_selector('.btn.btn-primary')
login_btn.click()
8.截图
driver.save_screenshot('csdn.png')
9.获取网页源码
driver.page_source()
# 遇到随滚轮滑动动态加载的页面,需要模拟滚轮滑动到底部后,再获取源码, 滑动速度不能太快,每次滑动一段距离即可.
10.实现拖拽效果
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
actions = ActionChains(driver)
driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
# 切换iframe iframe是一个独立新窗口,需切换
driver.switch_to.frame('iframeResult')
draggable = driver.find_element_by_id('draggable')
droppable = driver.find_element_by_id('droppable')
actions.drag_and_drop(draggable, droppable)
actions.perform()
# time.sleep(3)
# driver.quit()
11.滚动效果
滚动条下拉到底
#方法1
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') # 0到页面最大高度
#方法2
driver.execute_script("document.documentElement.scrollTop=10000")
12.谷歌无头模式
options = webdriver.ChromeOptions() # chrome配置选项
options.add_argument('headless') # 添加无头模式参数
driver = webdriver.Chrome(options=options)
13.执行js语句
driver.execute_script()
方法如果有返回值,有以下几种情况:
1、如果返回一个页面元素(document element), 这个方法就会返回一个WebElement
2、如果返回浮点数字,这个方法就返回一个double类型的数字
3、返回非浮点数字,方法返回Long类型数字
4、返回boolean类型,方法返回Boolean类型
5、如果返回一个数组,方法会返回一个List<Object>
6、其他情况,返回一个字符串
7、如果没有返回值,此方法就会返回null
例:
distance = driver.execute_script('var distance=document.body.scrollHeight;return distance;') # 获取页面高度
需要返回值时, js代码必须 return 该返回值
14.cookies操作
# 获取所有cookies信息
driver.get_cookies()
# 添加一个cookie信息
driver.add_cookie({'name': 'lisi', 'age': 18}) # 添加的cookie必须是字典形式
# 可以将get_cookies() 获取的 cookies 遍历添加进去
# 删除所有cookies
driver.delete_all_cookies()