1:什么是鼠标行为链
- 鼠标行为链可以模仿鼠标的一些行为,比如可以双击、单击,右键。
- 鼠标行为链简单来说就是,使用代码来模仿鼠标的一些动作
1.1:创建鼠标行为链的步骤
- 1:需要添加一个类
from selenium.webdriver import ActionChains
- 2:创建一个鼠标实例
- 3:使用鼠标类里面的一些方法,对网页进行一些操作
- 4:提交行为链
2:鼠标行为链的常用方法
2.1:在input标签里面输入内容
- 代码:
actions.send_keys_to_element(input_tag, '北京')
- 参数解释:
- input_tag:搜索框的标签位置
- 北京:要在输入框中输入的内容
- 返回值:在标签定位的输入框中输入,我们输入的数据
2.2:移动到指定标签的位置
- 代码:
actions.move_to_element(button_tag)
- 参数分析:
- button_tag:要移动到指定位置的标签
- 返回值:鼠标移动到指定的位置
2.3:获取网页的源码数据
- 代码:
print(driver.page_source)
- 参数:无,因为这是一个方法
- 返回值:返回一个网页的所有数据,既有静态数据,也有动态数据
selenium抓取数据的优势
- selenium抓取网页数据的方式是以网页最终渲染的页面抓取的,也就是说,无论动态数据还是静态数据,都可以抓取
2.4:查找某一字符串是否存在
- 作用:在html结构中,查找某一字符串是否存在,若存在则返回一个正整数,若不存在则返回一个-1
- 代码:
print(driver.page_source.find('kw'))
- 参数:
- kw:要查找的标签名(字符名)
- 返回值:一个正整数或者-1
- 作用:在爬取有翻页功能的网页的时候可以翻找下一页
2.5: 获取节点的某一属性值
- 作用:获取定位标签下面的一个属性值
- 代码
img_tag = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/a/img[2]')
print(img_tag.get_attribute('src'))
- 参数解释:
- img_tag:要获取属性值的标签
- src:要获取的属性值
- attribute:获取属性值的方法
- 返回值:返回一个标签,指定的属性值
2.6:获取节点及其子节点的文本内容
- 作用:返回这个节点及这个节点下面所有子节点的文本内容
- 代码:
div.text
- 参数:
- div:要获取文档内容的标签
- text:获取文档的方法
- 返回值:返沪这个节点及这个节点下面所有子节点的文本内容
3:设置无界面格式
3.1:作用
- 1:可以使程序快一点
- 2:节省内存
- 3:有的时候不需要打开交互的界面
3.2:设置步骤
- 一定要在确定代码没有问题的情况下在设置无界面格式
- 1:打开驱动的设置对象
options = webdriver.ChromeOptions()
- 2:设置无界面格置
options.add_argument('--headless')
- 死代码,记住就行了
- 3:添加驱动,以关键字的形式添加到Chrome()中
driver = webdriver.Chrome(options=options)
4:页面等待
4.1:隐式等待
4.1.1:使用Python的time模块设置
- 代码:
time.sleep(3)
...
- 返回值:等待三秒后在执行后面的语句
4.1.2:使用selenium的隐式等待
- 作用:在获取不可用的元素之前,会先等待10秒中的时间;如果获取了可用的元素,便会立刻执行下面的语句
- 代码
driver.implicitly_wait(10)
...
- 返回值:等待10秒之后,执行下面的代码
4.1.3:使用selenium的显示等待
-
作用:显示等待是表明某个条件成立后才执行获取元素的操作。也可以在等待的时候指定一个最大的时间,如果超过这个时间那么就抛出一个异常
-
注意:要先导入几个包
selenium.webdriver.support.excepted_conditions
selenium.webdriver.support.ui.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
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 核心代码
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"), '北京')
)
- 核心代码参数解释:
- driver:在使用显示等待的时候需要使用一个驱动,driver就是这个驱动
- 10:期望等待的时间,10秒
- By.ID:使用什么方式来查找要定位的标签
- myDynamicElement:使用** By.ID**要查询的标签名
- 返回值:在id标签为myDynamicElement的参数为"北京"的时候立即执行后面的代码,如果不是,则回一直等待,知道10秒之后
5:拓展(操作多个窗口)
5.1:重复使用get()方法
- 实现不了目的,因为重复操作多个get方法回造成网页的覆盖,最终只会打开最后打开的网页
5.2:使用driver.execute_script(‘window.open(“url”)’)方法
- 可以实现目的,但是后来打开的网页只是单纯的打开,代码操作的还是第一个打开的网页
5.3:关闭打开的网页
- 代码:使用close()方法就行
- 作用:关闭最先打开的网页
5.4:切换打开的网页
- 代码:
# 过时方法:在一些老的代码中可以看见
driver.switch_to_window(driver.window_handles[1])
# 流行方法:现在写的方法
driver.switch_to.window(driver.window_handles[1])
- 注意:切换窗口的方式是以索引的方式切换的,窗口以打开的顺序先来后到,索引以0开始
5.5:打印一个网页的url
- 代码
driver.current_url
- 返回值:返回当前打开网页的url地址