一、selenium元素定位技巧
selenium提供了8种定位方式 | python selenium中对应8种方法 |
---|---|
id | find_element_by_id() |
name | find_element_by_name() |
class_name | find_element_by_class_name() |
tag_name | find_element_by_tag_name() |
link_text | find_element_by_link_text() |
partial_link_text | find_element_by_partial_link_text() |
xpath | find_element_by_xpath() |
css_selector | find_element_by_css_selector() |
selenium元素定位示例如下:
模拟定位到如上图的input标签
①通过id定位:
dr.find_element_by_id("kw")
②通过name定位:
dr.find_element_by_name("wd")
③通过class_name定位:
dr.find_element_by_class_name("s_ipt")
④通过tag_name定位:
dr.find_element_by_tag_name("input")
⑤通过xpath定位:
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
或者dr.find_element_by_xpath("//input[@class='s_ipt']")
⑥通过css定位:
dr.find_element_by_css_selector(".s_ipt")
或者dr.find_element_by_css_selector("form#form>span>input")
模拟定位到如上图的a标签
通过link_text定位:
dr.find_element_by_link_text("新闻")
# 精确匹配超链接载体
通过link_text定位:
dr.find_element_by_partial_link_text("新")
# 模糊匹配超链接载体
link_text 和 partial_link_text区别:
link_text
是超链接载体的精确匹配,而partial_link_text
是对超链接载体的模糊匹配
二、selenium浏览器交互操作技巧
1).设置浏览器显示宽度
设置浏览器宽480、高800显示:
driver.set_window_size(480, 800)
但一般都不使用该方法,怕页面太小获取不到想要的内容
可以使用最大化来显示,如下:
driver.maximize_window()
或者不设置(即默认)
2).控制浏览器刷新、前进、后退
driver.refresh()
刷新
driver.back()
后退
driver.forward()
前进
3).控制鼠标
使用控制鼠标的操作,需要导入如下该包:
from selenium.webdriver.common.action_chains import ActionChains
以下四种鼠标操作都是
ActionChains
中存储的行为:
》
context_click()
右击
》
double_click()
双击
》
drag_and_drop()
拖动
》
move_to_element()
鼠标悬停
》》》
perform()
执行所有ActionChains
中存储的行为
该 perform() 方法需要在以上四种鼠标操作执行后再调用!!!
4).selenium设置元素等待
》WebDriver
提供了两种类型的等待:显示等待和隐式等待。
👉显示等待:【WebDriverWait()
】:显示等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。
显示等待的用法比较多,该写法如下:
导入:
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
》导入selenium模块的 浏览器驱动 (webdriver)
》导入By这个包,起到简写的作用,简化了"find_element_by_id"等的用法。后面查id时,直接By.ID即可查出id标签》导入selenium模块的 WebDriverWait显示等待
》导入selenium模块的场景判断(EC),用来判断某个元素是否出现
编写如下代码:
driver = webdriver.Chrome() # 使用Chrome浏览器驱动
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
其中:
》dirver:表示驱动》5:表示等待的最长时间
》0.5:是每隔0.5秒检测一次
》until():方法用来传入等待的条件
》presence_of_element_located:表示节点出现的意思
👉隐式等待:【implicitly_wait()
】是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。