Selenium是一个用电脑模拟人操作浏览器网页,可以实现自动化。以下是详细教程。
准备工作
1.安装selenium
pip install selenium
或者直接在pycharm中打开项目,点击file—>settings—>Project---->Python Interpreter点击“+”号,在弹出的框框里面输入selenium进行搜索下载安装。参考见下图:
2.下载浏览器驱动
Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver ,CNPM Binaries Mirror (npmmirror.com), taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
我使用的是谷歌浏览器,因此我下载的是ChromeDriver,需要将下载的压缩包放到pyhton项目下的\venv\Scripts目录下,例如我的放置路径为:F:\hf\pythonProject2\venv\Scripts
注意
随着浏览器的更新,对应的webdriver也应该随着一起更新,否则无法正常使用。更新webdriver就是再从官网上下载对应你浏览器版本的webdriver,再次解压,按照上述操作再进行一次就OK啦。
3.测试执行
执行下述代码可测试执行:
from selenium import webdriver
driver = webdriver.Firefox() # Firefox浏览器
# driver = webdriver.Firefox("驱动路径")
driver = webdriver.Chrome() # Chrome浏览器
driver = webdriver.Ie() # Internet Explorer浏览器
driver = webdriver.Edge() # Edge浏览器
driver = webdriver.Opera() # Opera浏览器
driver = webdriver.PhantomJS() # PhantomJS
# 打开网页
driver.get(url) # 打开url网页 比如 driver.get("http://www.baidu.com")
出现上图,运行代码使有网页弹出,证明配置成功。如果出现弹出的网页一闪而过的现象,先不要慌,这可能是你的elenium版本过高的原因,不妨试试下载一个较低的selenium版本,再次进行测试。本人用的是4.1.1版本的,不会出现闪退现象。
元素定位
#提前导包
from selenium.webdriver.common.by import By
find_element_by_id()
# 新的写法
find_element(by=By.ID,value="")
find_element_by_name()
# 新的写法
find_element(by=By.NAME,value="")
find_element_by_class_name()
# 新的写法
find_element(by=By.CLASS_NAME,value="")
find_element_by_tag_name()
# 新的写法
find_element(by=By.TAG_NAME,value="")
find_element_by_link_text()
# 新的写法
find_element(by=By.LINK_TEXT,value="")
find_element_by_partial_link_text()
# 新的写法
find_element(by=By.PARTIAL_LINK_TEXT,value="")
find_element_by_xpath()
# 新的写法
find_element(by=By.XPATH,value="")
find_element_by_css_selector()
# 新的写法
find_element(by=By.CSS_SELECTOR,value="")
在element变成elements就是找所有满足的条件,返回数组。
注
想要使用Xpath直接在浏览器中复制即可,详细见下图:
控制浏览器操作
控制浏览器窗口大小
driver.set_window_size(480, 800)
浏览器后退前进
# 后退
driver.back()
# 前进
driver.forward()
浏览器刷新
driver.refresh() # 刷新
Webelement常用方法
点击和输入
driver.find_element_by_id("kw").clear()
# 清楚文
driver.find_element_by_id("kw").send_keys("selenium")
# 模拟按键输入
driver.find_element_by_id("su").click()
# 单机元素
提交
可以在搜索框模拟回车操作
search_text = driver.find_element_by_id('kw') search_text.send_keys('selenium') search_text.submit()
其他
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 获得属性值。
is_displayed(): 设置该元素是否用户可见。
鼠标操作
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
ActionChains 类提供了鼠标操作的常用方法:
perform(): 执行所有 ActionChains 中存储的行为;
context_click(): 右击;
double_click(): 双击;
drag_and_drop(): 拖动;
move_to_element(): 鼠标悬停。
例如:
from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")
# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
键盘操作
以下为常用的键盘操作:
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12
# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
from selenium.webdriver.common.keys import Keys
# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
获取断言信息
title = driver.title # 打印当前页面title
now_url = driver.current_url # 打印当前页面URL
user = driver.find_element_by_class_name('nums').text # # 获取结果数目
等待页面加载完成
显示等待
显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(
EC.presence_of_element_located((By.ID, "kw"))
)
element.send_keys('selenium')
driver.quit()
WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为False。
在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。文章来源:https://www.toymoban.com/news/detail-458519.html
隐式等待
如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。文章来源地址https://www.toymoban.com/news/detail-458519.html
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
到了这里,关于Python+Selenium教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!