前言
1.前置准备
1、selenium是Python的第三方模块,因此需要通过pip下载使用。
pip3 install selenium
2、下载对应版本的 chrome driver (Chrome浏览器驱动程序)
下载地址:http://chromedriver.storage.googleapis.com/index.html
2.基础用法
配置:
# 导入模块
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
# 生成Options对象
opt = webdriver.ChromeOptions()
# 设置窗口隐(2种方法任选一种)
opt.add_argument("--headless")
opt.set_headless()
# 添加user-agent
opt.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"')
# 设置代理(ip、port为代理IP、端口)
opt.add_argument("--proxy-server=http://{}".format(ip:port))
# 设置窗口打开时的大小
opt.add_argument("window-size=1920,1080")
# 创建浏览器对象,其中options为选填参数
driver = webdriver.Chrome(options=opt)
基本操作:
# 请求网站
url = "www.baidu.com"
driver.get(url)
# 获取网站HTML
driver.page_source
# 获取网站URL
driver.current_url
# 获取HTML中元素节点
driver.find_element_by_xpath(xpath字符串)
driver.find_element_by_class_name(class字符串)
driver.find_element_by_id(id字符串)
driver.find_element_by_name(name字符串)
driver.find_element_by_link_text(文本文字)
# 获取HTML标签中指定属性值
driver.find_element_by_xpath(xpath字符串).get_attribute(属性名)
# 获取元素在网页中的坐标位置(格式:{'y':15, 'x':25})
coordinate = driver.find_element_by_xpath(xpath字符串).location
# 判断元素在网页上是否可见(返回值为True或False)
result = driver.find_element_by_xpath(xpath字符串).is_displayed()
# 判断元素是否被选中(通常用于checkbox和radio标签,返回值为True或False)
result = driver.find_element_by_xpath(xpath字符串).is_selected()
# 模拟点击元素节点
driver.find_element_by_xpath(xpath字符串).click()
# 双击操作
ActionChains(driver).double_click(元素对象).perform()
# 模拟输入文本框
driver.find_element_by_xpath(xpath字符串).send_keys(要输入的内容字符串)
# 模拟清空输入框的内容
driver.find_element_by_xpath(xpath字符串).clear()
# 关闭浏览器当前标签页
driver.close()
# 关闭浏览器所有元素标签页
driver.quit()
窗口操作:
# 窗口最大化
driver.maximize_window()
#窗口切换操作
#获取浏览器的全部窗口信息
handles = driver.window_handles
#切换窗口(方法2选1)
driver.switch_to_window(handles[0])
driver.switch_to.window(driver.window_handles[0])
页面滚动
# 模拟页面滚动
driver.execute_script("window.scrollTo(x,y)")
详解:
x 表示横向水平坐标位置 (-)
y 表示纵向垂直坐标位置 (|)
实用:
y 滚动至页面底部:document.body.scrollHeight
y 页面按比例滚动至50%的位置:document.body.scrollHeight * 0.5
frame操作
# frame框架的切换
# 通过索引定位
driver.switch_to.frame(0)
# 从iframe跳回HTML
driver.switch_to.default_content()
frame框架的切换
frame的作用是在HTML代码中嵌套一个或多个不同的HTML代码
(iframe和frame实现)
特殊操作
#shadow-root操作
# 获取shadow-root下的某内容
sales_num_obj = self.driver.execute_script('return document.getElementsByTagName(SR父元素)[0].shadowRoot.querySelector(定位标签属性)'
详解:
主要同过JS方式进行操作
SR父元素:表示shadow-root的上一级元素标签,根据实际选择定位方式
定位标签属性:定位需要获得的对应标签元素,通过一下方式获取
id ("#名称")
class (".名称")
标签名称 (“名称”)