1、pycharm安装selenium
pip install selenium
注意自己安装的python的解释器有几个,如果用的解释器没有加入到环境变量中,是无法调用webdriver的
2、安装webdriver
安装Chrome 浏览器对应版本的 ChromeDriver,才能驱动 Chrome 浏览器完成相应的操作。
相关链接:
官方网站:https://sites.google.com/a/chromium.org/chromedriver
下载地址:https://chromedriver.storage.googleapis.com/index.html
我们需要根据Chrome 浏览器的版本去下载,点击 Chrome 菜单 “帮助”→“关于 Google Chrome”,即可查看 Chrome 的版本号。
我的Chrome游览器的版本为 105.0.5195.127
国内下载谷歌地址可能比较慢,我们可以通过阿里的镜像站下载,地址:http://npm.taobao.org/mirrors/chromedriver/
只要前三组数字相同就可以适配,尽量选择前三组数字版本号相同的最新的版本,windows就选win32,解压出来之后将.exe 文件移动到用的python解释器的根目录,将chromedriver.exe所在目录加入环境变量。
这里推荐将chromedriver.exe放入python安装目录下的Scripts目录中。
3、开始第一个简单的selenium自动化示例
# 导包
import time
from time import sleep
from selenium import webdriver
import pyperclip
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# 实例化浏览器
driver = webdriver.Chrome()
driver.maximize_window() # 最大化网页
# 打开网址
driver.get('https://www.baidu.com/')
# 老的写法
# ele = driver.find_element_by_id('kw').send_keys('易烊千玺')
# 新的写法
# driver.find_element(By.XPATH, '//*[@id="kw"]')
# # 根据xpath选择元素(万金油)
# driver.find_element(By.CSS_SELECTOR, '#kw')
# # 根据css选择器选择元素
# driver.find_element(By.NAME, 'wd')
# # 根据name属性值选择元素
# driver.find_element(By.CLASS_NAME, 's_ipt')
# # 根据类名选择元素
# driver.find_element(By.LINK_TEXT, 'hao123')
# # 根据链接文本选择元素
# driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')
# # 根据包含文本选择
# driver.find_element(By.TAG_NAME, 'title')
# # 根据标签名选择
# # 目标元素在当前html中是唯一标签或众多标签第一个时候使用
# driver.find_element(By.ID, 'su')
# # 根据id选择
ele = driver.find_elements(by=By.CSS_SELECTOR, value='#kw') # 新的写法需要详细看一下新方法的调用
# ele[0].send_keys("李健") # 现在ele是作为list列表返回,所以需要进行选定列表中的第一项,另外send_keys方法是模拟键盘输入,输入较慢,后应加线程挂起时间,否则后面的click操作容易崩掉
sea = driver.find_elements(by=By.CSS_SELECTOR, value='#su')
# sea[0].click()
# sleep(5)
# pyperclip适用于快速大量重复输入 耗时:0.30717897415161133 秒
start_time = time.time()
# ele[0].send_keys('在' * 1000) # 发送1000个字符串 耗时:1.4940814971923828 秒 都可以进行测试一下尝试一下
# pyperclip.copy('在' * 1000) # 粘贴到剪切板
# ele[0].send_keys(Keys.CONTROL, 'v') # 发送ctrl+v 粘贴
sea[0].click()
end_time = time.time()
print(f'耗时:{end_time-start_time} 秒')
sleep(2)
# 清空
# ele[0].clear()
# ele[0].send_keys('赵雷')
# sleep(5)
# sea[0].click()
# 时间轴看效果
sleep(3)
# 关闭页面
driver.quit()
根据好多前辈的文件,我编辑了,但是好多都是python2的语句,python3有点不适用,所以就按照之前博主写的例子改成现在用的,里面每个细节我基本上都有解释
重点:
1、元素定位方法跟之前的有所变化(这是最新python3的写法)
# 老的写法
# ele = driver.find_element_by_id('kw').send_keys('易烊千玺')
# 新的写法
# driver.find_element(By.XPATH, '//*[@id="kw"]')
# # 根据xpath选择元素(万金油)
# driver.find_element(By.CSS_SELECTOR, '#kw')
# # 根据css选择器选择元素
# driver.find_element(By.NAME, 'wd')
# # 根据name属性值选择元素
# driver.find_element(By.CLASS_NAME, 's_ipt')
# # 根据类名选择元素
# driver.find_element(By.LINK_TEXT, 'hao123')
# # 根据链接文本选择元素
# driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')
# # 根据包含文本选择
# driver.find_element(By.TAG_NAME, 'title')
# # 根据标签名选择
# # 目标元素在当前html中是唯一标签或众多标签第一个时候使用
# driver.find_element(By.ID, 'su')
# # 根据id选择
2、元素定位返回的不是对象,现在变成list属性了,所以需要制定列表中的首位之后,进行操作元素的点击和输入
ele = driver.find_elements(by=By.CSS_SELECTOR, value='#kw') # 新的写法需要详细看一下新方法的调用
ele[0].send_keys("李健") # 现在ele是作为list列表返回,所以需要进行选定列表中的第一项,另外send_keys方法是模拟键盘输入,输入较慢,后应加线程挂起时间,否则后面的click操作容易崩掉
sea = driver.find_elements(by=By.CSS_SELECTOR, value='#su')
sea[0].click()
3、pyperclip类,优点适用于快速大量重复的输入等操作,不同于send_keys() 模拟键盘操作,但是send_keys()在应对一些网页数据输入有保护机制的时候可能是有效的
# pyperclip适用于快速大量重复输入
start_time = time.time()
ele[0].send_keys('在' * 1000) # 发送1000个字符串
pyperclip.copy('在' * 1000) # 粘贴到剪切板
ele[0].send_keys(Keys.CONTROL, 'v') # 发送ctrl+v 粘贴
sea[0].click()
end_time = time.time()
print(f'耗时:{end_time-start_time} 秒')
sleep(2)
# pyperclip 的耗时:0.30717897415161133 秒
# send_keys 的耗时:1.4940814971923828 秒
# 都可以测试一下看看