1、首先要有python安装环境
2、Selenium环境的安装主要就是安装两样东西: 客户端库 和 浏览器 驱动
- 安装客户端库
cmd命令符:pip install selenium
教程:www.python3.vip - 安装浏览器驱动,根据Google浏览器的版本来安装对应的驱动
驱动安装地址
这是个zip包,下载下来之后,解压里面的程序文件 chromedriver.exe 到某个目录下面
注意这个目录的路径最好是没有中文名和空格的
比如,解压到 d:\webdrivers 目录下面。
也就是保证我们的Chrome浏览器驱动路径为 d:\webdrivers\chromedriver.exe
3、下载pycharm并写一个简单示例
from selenium import webdriver
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'd:\chromedriver\chromedriver.exe')
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('http://python3.vip')
pass
4、选择界面元素
1、根据 元素的id 属性选择元素find_element_by_id
- 想要让浏览器自动化输入一句话,需要操控界面元素
- 想要操控界面元素就需要获取界面元素或者定位界面元素
- 找到界面元素、操控他
- 打开百度,找到输入框可以定位的唯一标识id
from selenium import webdriver
# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'd:\chromedriver\chromedriver.exe')
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com/')#get方式请求
element = wd.find_element_by_id('kw')#唯一标识id
element.send_keys("李慕陈\n")
pass
-
浏览器,找到id为kw的元素后,将结果通过 浏览器驱动 返回给 自动化程序, 所以 find_element_by_id 方法会 返回一个
WebElement 类型的对象。这个WebElement 对象可以看成是对应 页面元素 的遥控器。
我们通过这个WebElement对象,就可以 操控 对应的界面元素。
比如 :
调用这个对象的 send_keys 方法就可以在对应的元素中 输入字符串,
调用这个对象的 click 方法就可以 点击 该元素。
2、根据 class属性 选择元素find_elements_by_class_name(返回值是webelement对象) -
使用 find_elements 选择的是符合条件的 所有 元素, 如果没有符合条件的元素, 返回空列表
from selenium import webdriver
wd = webdriver.Chrome(r'd:\chromedriver\chromedriver.exe')#要和自己的安装的位置一致哦!
wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')
# 根据 tag name 选择元素,返回的是 一个列表
# 里面 都是 tag 名为 div 的元素对应的 WebElement对象
elements = wd.find_elements_by_tag_name('div')
# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
print(element.text)
- 使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出
NoSuchElementException 异常
from selenium import webdriver
wb = webdriver.Chrome(r'd:\chromedriver\chromedriver.exe')
wb.get("http://cdn1.python3.vip/files/selenium/sample1.html")
elements= wb.find_element_by_class_name("plant")
print(elements.text)
pass
总结:find_element 和 find_elements 的区别
使用 find_elements 选择的是符合条件的 所有 元素, 如果没有符合条件的元素, 返回空列表
使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出 NoSuchElementException 异常
3、通过WebElement对象选择元素
WebElement与WebDriver区别:
WebDriver 对象 选择元素的范围是 整个 web页面
WebElement 对象 选择元素的范围是 该元素的内部
4、等待页面出现
当send_keys之后,获取id元素并且输出的时候会出现NoSuchElementException错误,
因为浏览器需要把这个搜索请求发送给百度服务器, 百度服务器进行处理后,把搜索结果返回给我们。
所以,从点击搜索到得到结果,需要一定的时间
我们等等"ta"
from selenium import webdriver
wb = webdriver.Chrome(r'd:\chromedriver\chromedriver.exe')
wb.get('https://www.baidu.com/')
element = wb.find_element_by_id("kw")
element.send_keys("lidonh\n")
from time import sleep# 从time库用sleep模块
sleep(2)#等待两秒
element = wb.find_element_by_id("1")
print(element.text)
pass
但是这样会有一个问题,不知道等待多久合适,selenium给出一个解决方案wd.implicitly_wait(10)
它的作用是找不到该元素就每隔半秒再去界面查看一次,里面的参数是最大等待时间
在一个脚本中只需要使用一次(作用范围是针对整个webdriver对象实例)