一、安装selenuim模块

pip install selenium

二、基本使用

1、导入模块

from selenium import webdriver

2、创建一个浏览器对象,如果不在字符串前加r,路径需要使用双斜线\

browser = webdriver.Chrome(r"D:\python_env\python3\Scripts\chromedriver.exe")

谷歌浏览器下载地址: http://chromedriver.storage.googleapis.com/index.html
驱动下载后放在python.exe所在目录后可以不用写完整的路径,如果写完整的路径需要在双引号前加r来屏蔽转义。
浏览器的可执行文件需要提前添加到环境变量中

3、设置加载时间,给浏览器足够的时间将所有页面元素加载完毕,其他等待操作可以使用time包中的sleep()方法实现;

browser.implicitly_wait(10)

4、访问URL,等价于在浏览器地址栏输入地址后访问;

browser.get("https://www.baidu.com")

5、html元素对象定位(重要);

  • find_element_by_id 通过id定位元素,该方法返回一个元素对象;

    driver.find_element_by_id("email").send_keys(r"cy@outlook.com")
  • find_elements_by_id通过id查找元素,返回一个元素对象列表。虽然html页面中id一般是唯一的,但是selenium依然提供了这个方法,用的很少。

    elememts = driver.find_elements_by_id("username")
    for e in elememts:
      e.send_keys("11223344")
  • find_element_by_name通过标签的name属性获取元素对象;

    driver.find_element_by_name("password").send_keys("chian")
  • find_elements_by_name通过标签的name属性获取元素对象列表;
  • find_element_by_tag_name通过标签名定位元素对象,如果有多个只匹配第一个;
  • find_elements_by_tag_name通过标签名定位元素对象列表;
  • find_element_by_class_name通过标签的类名定位元素对象,如果有多个只匹配第一个,仅支持单类名查找,要查找多个类名的用xpath或css_selector;
  • find_elements_by_class_name通过标签的类名定位元素对象列表;
  • find_element_by_link_text通过超链接的文本定位元素,如果有同名的返回第一个;
  • find_elements_by_link_text通过超链接的文本定位元素列表;
  • find_element_by_partial_link_text与find_element_by_link_text类似,只是它是模糊匹配成功后返回元素对象;
  • find_elements_by_partial_link_text与find_elements_by_link_text类似,只是它是模糊匹配成功后返回元素对象列表;
  • find_element_by_xpath通过path路径定位元素(重要),有通过绝对路径(/)和相对路径(//)两种方式来定位,浏览器插件可以提取这些标识PATH;
    复制出来的结果是://[@id="password"],就可以使用driver.find_element_by_xpath('//[@id="password"]');
  • find_element_by_css_selector通过样式进行元素定位(非常重要,推荐)

    # 通过css样式选择器进行元素定位的方式很多,且支持多个class的标签
    # 通过标签的路径定位
    driver.find_element_by_css_selector("html > body > div > div > div > div > div > form > span > input")
    driver.find_element_by_css_selector("span > input")
    # 符号"#"代表使用id匹配,即匹配id为kw的元素
    driver.find_element_by_css_selector("#kw")  
    # 符号"."代表使用class名称匹配,即匹配class名称为s_ipt的元素
    driver.find_element_by_css_selector(".s_ipt")   
    # 表达式"[属性名称=属性值]"表示按照属性匹配(注意引号的运用)
    driver.find_element_by_css_selector("[name=wd]")
    # 任意span下Class名称为s_ipt,Name属性为wd的input元素
    driver.find_element_by_css_selector("span > input[class='s_ipt'][name='wd']")  #查找

    6、 关闭浏览器。

    方式一:关闭所有与当前操作相关的窗口,并退出驱动,释放资源(推荐)
    browser.quit()
    方式二:关闭当前窗口
    browser.close() 

    三、常用操作

3.1 浏览器导航栏操作

#后退
driver.back()
#前进
driver.forward()
#刷新
driver.refresh()

3.2 窗口基本操作

#最小化窗口
driver.minimize_window()
#最大化窗口   
driver.maximize_window()
#关闭窗口
driver.close()
#将浏览器窗口移动到指定位置             
driver.set_window_position(坐标X, 坐标Y)
#将浏览器窗口设置为指定大小 
driver.set_window_size(宽度像素, 高度像素) 
#将浏览器窗口移动到指定位置,同时设置窗口大小
driver.set_window_rect(坐标X, 坐标Y, 宽度像素, 高度像素)

3.3 获取浏览器信息

# 获取浏览器窗口当前的网址
driver.current_url 
# 获取浏览器窗口当前的标题
driver.title  

3.4 获取窗口信息

# 获取位置对象
driver.get_window_position() 
# 获取大小对象
driver.get_window_size()
# 获取位置及大小对象
driver.get_window_rect() 

3.5 鼠标操作

# 对于简单的单击事件只需要调用对象元素的click()方法即可,其他鼠标事件需要导入ActionChains模块
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('https://www.baidu.com/')

# 单击操作
right = driver.find_element_by_id("kw")
ActionChains(driver).context_click(right).perform()

# 双击操作
double = driver.find_element_by_id("kw")
ActionChains(driver).double_click(double).perform()

# 拖放操作
#定位源元素
source = driver.find_element_by_id("xx")
#定位目的元素
target = driver.find_element_by_id("xx")
#执行移动操作
ActionChains(driver).drag_and_drop(source,target).perform()

#悬浮操作
above = driver.find_element_by_id("xx")
ActionChains(driver).move_to_element(above).perform()

3.6 键盘操作

from selenium.webdriver.common.keys import Keys
# 操作删除键BackSpace
send_keys(Keys.BACK_SPACE)
# 操作空格键Space
send_keys(Keys.SPACE)
# 操作制表键Tab
send_keys(Keys.TAB)
# 操作回退键Esc
send_keys(Keys.ESCAPE)
# 操作回车键Enter
send_keys(Keys.ENTER)
# 全选(Ctrl+A)
send_keys(Keys.CONTROL,'a')
# 复制(Ctrl+C)
send_keys(Keys.CONTROL,'c')
# 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'x')
# 粘贴(Ctrl+V)
send_keys(Keys.CONTROL,'v')
# 操作F1
send_keys(Keys.F1)

3.7 无头浏览器

from selenium import webdriver
# 设置无窗口
browserOption = webdriver.ChromeOptions()
browserOption.headless = True
# 声明浏览器对象
driver = webdriver.Chrome(options=browserOption)
# 访问页面
driver.get("http://www.baidu.com")

3.8 其他浏览器参数

# 启动就最大化
--start-maximized

# 指定用户文件夹 User Data 路径,可以把书签这样的用户数据保存在系统分区以外的分区
–-user-data-dir=”[PATH]”

# 指定缓存Cache路径
–-disk-cache-dir=”[PATH]“

# 指定Cache大小,单位Byte
–-disk-cache-size=100

# 隐身模式启动
–-incognito

# 禁用Javascript
–-disable-javascript

# 禁止加载所有插件,可以增加速度
--disable-plugins

# 禁用JavaScript
--disable-javascript

# 禁用弹出拦截
--disable-popup-blocking

# 禁用插件
--disable-plugins

# 禁用图像
--disable-images

# 设置代理
--proxy-server=http://ip:port

3.9 标签页切换

from selenium import webdriver
import time
driver = webdriver.Chrome(r"D:\python_env\python3\Scripts\chromedriver.exe")
# 等待10s加载完所有元素
driver.implicitly_wait(10)
driver.get("http://172.31.1.99/test.html")
time.sleep(2)
# 新增一个标签页
driver.execute_script('window.open()')
time.sleep(2)
# 打印标签页
print(driver.window_handles)
# 切换至标签页1(当前标签页为0)
driver.switch_to.window(driver.window_handles[1])
time.sleep(2)
# 在当前标签页访问知乎
driver.get("http://www.zhihu.com")
time.sleep(2)
driver.quit()

标签: none

添加新评论