selenium安装配置及基本使用
1.安装并配置selenium
1.1 下载selenium库
pip install selenium==3.3.0
1.2 安装chromedriver
- 下载chromedriver,根据goole版本下载
chromedriver下载链接
https://googlechromelabs.github.io/chrome-for-testing/#stable - 将下载的chromedriver配置到系统环境变量中
- 右键此电脑,点击属性
- 点击高级系统设置
- 点击高级–》点击环境变量
- 找到系统变量path,点击编辑
- 点击新建,将chromedriver的路径放进去,点击确定-》确定-》确定
- 右键此电脑,点击属性
2. selenium使用
2.1导入相关库
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
2.2配置相关属性
option = webdriver.ChromeOptions()
option.add_argument('window-size=1920x3000') # 指定浏览器分辨率
option = webdriver.ChromeOptions( )
option.add_argument('window-size=1920x3000') # 指定浏览器分辨率
option.add_argument('--headless') #无头
option.add_argument('--disable-gpu')
option.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
option.add_argument('--proxy-server=http://127.0.0.1:1087') #添加代理
2.3 基本使用
- 请求
url='https:wwww.baidu.com' driver = webdriver.Chrome(chrome_options=option) driver.maximize_window() # 设置最大的窗口 driver.get(url) # 访问连接 driver.save_screenshot("baidu.png") # 截图
- 查看请求信息
driver.page_source # 获取页面内容 driver.get_cookies() # 获取cookie driver.current_url # 获取当前的url
- 获取cookie
dictCookies = driver.get_cookies()
- 添加cookie
cookies ={ "_routing_id":"46139510-8ede-424f-b63a-e8d7aa4bdfa4", "sessionFunnelEventLogged":"1", "_auth":"1", "g_state":'{"i_l":0}', "cm_sub":"allowed" } driver.get(url) # 请求 # 添加cookie driver.add_cookie({'name':'_routing_id','value':cookies['_routing_id']}) driver.add_cookie({'name':'sessionFunnelEventLogged','value':cookies['sessionFunnelEventLogged']}) driver.add_cookie({'name':'_auth','value':cookies['_auth']}) driver.add_cookie({'name':'g_state','value':cookies['g_state']}) driver.add_cookie({'name':'cm_sub','value':cookies['cm_sub']}) #重新请求 driver.get(url)
- 删除cookie
# 删除一条cookie driver.delete_cookie("CookieName") # 删除所有的cookie driver.delete_all_cookies()
- 退出
driver.close() # 退出当前页面 driver.quit() # 退出浏览器
3.元素方法
3.1 元素定位【2种方式】
-
使用id值定位【By.ID 】
el = driver.find_element(By.ID, '') el = driver.find_element_by_id()
-
使用xpath定位【By.XPATH】
el = driver.find_element(By.XPATH, '') el = driver.find_element_by_xpath()
-
使用标签名定位【By.TAG_NAME】
el = driver.find_element(By.TAG_NAME, '') el = driver.find_element_by_tag_name()
-
使用超链接文本定位【By.LINK_TEXT】
el = driver.find_element(By.LINK_TEXT, '') el = driver.find_element_by_link_text()
-
使用部分超链接文本定位【By.PARTIAL_LINK_TEXT】
el = driver.find_element(By.PARTIAL_LINK_TEXT , '') el = driver.find_element_by_partial_link_text()
-
使用name属性值定位【By.NAME】
el = driver.find_element(By.NAME, '') el = driver.find_element_by_name()
-
使用class属性值定位【By.CLASS_NAME 】
el = driver.find_element(By.CLASS_NAME, '') el = driver.find_element_by_class_name()
-
使用css选择器定位【By.CSS_SELECTOR】
el = driver.find_element(By.CSS_SELECTOR, '') el = driver.find_element_by_css_selector()
-
查找输入框
input_name=driver.find_element(By.XPATH, '//input[@placeholder="Airport, country, hashtag, etc."]') input_name.send_keys(point,Keys.ENTER) # 回车
-
查找兄弟的下一个文本数据
# 根据文本确认位置,在查询兄弟节点 text=driver.find_elements(By.XPATH,"//*[text()='Coordinates']/following-sibling::td")[0].text
-
获取页面html源码
html=driver.page_source
-
滚轮滑动
# 一次滑动 js = "window.scrollTo(0,800);" driver.execute_script(js) # 多次滑动 for i in range(10): js='window.scrollBy(0,200)' driver.execute_script(js)
3.2 元素操作
代码 | 含义 |
---|---|
el.get_attribute(key) | 获取key属性名对应的属性值 |
el.text | 获取开闭标签之间的文本内容 |
el.click() | 对元素执行点击操作 |
el.submit() | 对元素执行提交操作 |
el.clear() | 清空可输入元素中的数据 |
el.send_keys(data,Keys.ENTER) | 向可输入元素输入数据,并且回车 |
3.3 等待操作
- 强制等待
import time time.sleep(n)
- 显式等待
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10,0.5).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) # \设置最长等待时间10,在10秒内每隔0.5秒使用指定条件去定位元素,如果定位到元素则直接结束等待,如果在10秒结束之后仍未定位到元素则报错
- 隐式等待
driver.implicitly_wait(10) # 在指定的n秒内每隔一段时间尝试定位元素,如果n秒结束还未被定位出来则报错
3.4 窗口切换
- 获取当前所有的窗口
current_windows = driver.window_handles
- 窗口索引切换
driver.switch_to.window(current_windows[1])
- 跳转到最后一个窗口
driver.switch_to.window(web.window_handles[-1])
- 跳到第一个窗口
driver.switch_to.window(current_windows[0])
- 获取iframe窗口元素
driver.switch_to.frame(name/el/id)
- 获取弹窗信息
alert = driver.switch_to_alert()
3.5页面操作
- 前进
driver.forward()
- 后退
driver.back()
- 刷新
driver.refresh()
- 关闭当前窗口
driver.close()