不同的浏览器使用各自不同的driver
代码统一调用webdriver操作浏览器
安装diiver
先查看浏览器版本
进入 https://registry.npmmirror.com/binary.html?path=chromedriver/ 下载相对应的chromedriver,当然这玩意还要配置需要将 chromedriver.exe 所在的目录设置为path环境变量中的路径
安装
pip install selenium
安装完成测试一下
import time
from selenium import webdriver
# 通过指定chromedriver的路径来实例化driver对象,chromedriver放在当前目录。
# driver = webdriver.Chrome(executable_path='./chromedriver')
# chromedriver已经添加环境变量
driver = webdriver.Chrome()
# 控制浏览器访问url地址
driver.get("https://www.baidu.com/")
# 在百度搜索框中搜索'python'
driver.find_element_by_id('kw').send_keys('python')
# 点击'百度搜索'
driver.find_element_by_id('su').click()
time.sleep(6)
# 退出浏览器
driver.quit()
driver对象的使用
语句 | 作用 |
---|---|
driver.page_soure | 返回渲染过后的原网页 |
driver.curr_url | 显示对应的url |
driver.close() | 关闭当前标签页 |
driver.forward() | 页面前进 |
driver.back | 页面后退 |
driver.screen_shot(img_name) | 页面截图 |
元素定位
语句 | 作用 | |
---|---|---|
1 | driver.find_element_by_xpath(" ") | 通过xpath定位 |
2 | driver.find_element_by_css_selector(" ") | 通过css选择器定位 |
3 | driver.find_element_by_name(" ") | 通过name属性值定位 |
4 | driver.find_element_by_class_name(" ") | 通过class属性值定位 |
5 | driver.find_element_by_link_text(" ") | 通过文本内容定位 |
6 | driver.find_element_by_partial_link_text(" ") | 通过部分文本内容定位 |
7 | driver.find_element_by_tag_name(" ") | 通过html标签进行定位如果有多个就返回第一个 |
在element后面可以加s表示匹配多个如果没有就会返回空列表
元素操作
操作 | 作用 |
---|---|
.text | 提取文字 |
.get_attribute(" ") | 提取属性值 |
.click() | 点击 |
.send_keys("") | 输入数据 |
.clear() | 对输入框清空 |
窗口切换
窗口的句柄
通过窗口句柄切换标签
x=driver.window_handles #获取标签的所有句柄并返回列表
driver.switch_to.window(x[0]) #根据句柄切换窗口
frame是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是driver.switch_to.frame( ) 括号填写小窗口的frame
cookie的操作
driver.get_cookies() 拿到cookie可以这样拿到cookie后使用requests模块
字典推导式
x={cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
操作js
一般用于触发式
滚动条的拖动
js='scrollto(0,500)' #js代码
driver.execute_script(js) #操作js语句
页面等待
1.强制等待
time.sleep()
2.隐式等待
等待设置时间时间内会不断判断条件是否达成如果达成继续执行后续代码
driver.implicitly_wait(10) # 会等待10秒钟期间不断查找
3.显示等待
明确等待,经过指定时间检测
配置对象
无头浏览器、代理、更换标识符
创建一个无头浏览器
driver=webdriver.PhantomJS()
from selenium import webdriver
url='http://www.qq.com'
#实例化对象
options = webdriver.ChromeOptions()
#配置对象开启无界面模式
options.add_argument("--headless")
#配置对象禁止gpu命令
options.add_argument("--disable-gpu")
#添加代理
options.add_argument("--proxy-server=http://175.24.112.3:7788")
#跟换浏览器标识
options.add_argument("--user-agent=Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Mobile Safari/537.36")
#创建浏览器对象时添加配置对象
driver = webdriver.Chrome(chrome_options=options)
#发起请求
driver.get(url)
#截图
driver.save_screenshot('123/baidu21.png')
#关闭浏览器
driver.quit()