1.简介
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接调用浏览器,它支持所有主流的浏览器。我们可以使用selenium很容易完成之前编写的爬虫。webdriver
可以理解它是浏览器的驱动。
selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器
-
pip install selenium
==3.141.0 -
下载浏览器驱动程序:
-
https://registry.npmmirror.com/binary.html?path=chromedriver/&spm=a2c6h.24755359.0.0.1c384dccQ9PaJR
-
https://msedgewebdriverstorage.z22.web.core.windows.net/
需要把相应的驱动放到python的编译环境下
-
edge的驱动需要换名字:
MicrosoftWebDriver.exe
-
卸载已经安装的模块:pip uninstall 模块名
2. 浏览器对象
声明不同浏览器对象
from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()
-
get(url=url)
:地址栏输入url
地址并确认 -
page_source
:HTML结构源码 -
maximize_window()
:浏览器窗口最大化 -
quit()
:关闭浏览器
from selenium import webdriver
# 声明Chrome浏览器对象
browser = webdriver.Chrome()
# 请求页面
browser.get('https://www.taobao.com')
print(browser.page_source) # 获取网页源代码
# browser.close() # 关闭当前页面
3. selenium定位元素
from selenium.webdriver.common.by import By
find_element(By.ID, '根据标签id属性进行定位')
find_element(By.NAME, '根据标签name属性进行定位')
find_element(By.CLASS_NAME, '根据标签class属性进行定位')
find_element(By.XPATH, '根据xpath语法进行定位')
find_element(By.CSS_SELECTOR, '根据css语法进行定位')
find_element(By.LINK_TEXT, '根据标签文本内容进行定位')
from selenium import webdriver
from selenium.webdriver.common.by import By #选择器
browser = webdriver.Chrome()
browser.get('https://taobao.com')
# 通过元素ID查找
by_id = browser.find_element(By.ID,'q')
by_id.send_keys('美食')
print(by_id)
# 通过css选择器查找
css_select = browser.find_element(By.CSS_SELECTOR,'#q')
css_select.send_keys('美食')
# 通过xpath查找
xpath = browser.find_element(By.XPATH,'//*[@id="q"]')
xpath.send_keys('美食')
# browser.close()
4. 无界面模式
from selenium import webdriver
options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
5. 打开新窗口和切换页面
selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了
-
selenium中没有专门的打开新窗口的方法,是通过
execute_script()
来执行js
脚本的形式来打开新窗口的。window.execute_script("window.open('https://www.douban.com/')")
-
打开新的窗口后
driver
当前的页面依然还是之前的,如果想要获取新的窗口的源代码,那么就必须先切换过去。window.switch_to.window(driver.window_handles[1])
window:js的window对象
scrollTo:window的方法,可以滚到页面的任何位置
scrollHeight:是dom元素的通用属性,document.body.scrollHeight会返回body元素的高度,基本上就是页面的高度
scrollLeft:获取位于对象左边界和窗口目前可见内容的最左端之间的距离
scrollTop:获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象滚动的宽度
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('http://news.baidu.com/')
time.sleep(2)
#滚动到浏览器底部
js = 'window.scrollTo(0,document.body.scrollHeight)'
driver.execute_script(js) # 执行js代码
time.sleep(2)
# # #滚动到顶部
js = 'window.scrollTo(0,document.body.scrollTop=0)'
driver.execute_script(js)
6. selenium-iframe
网页中嵌套了网页,先切换到iframe
,然后再执行其他操作
-
切换到要处理的Frame
browser.switch_to.frame(frame节点对象)
-
在Frame中定位页面元素并进行操作文章来源:https://www.toymoban.com/news/detail-483250.html
-
返回当前处理的Frame的上一级页面或主页面文章来源地址https://www.toymoban.com/news/detail-483250.html
# 返回上一级 browser.switch_to.parent_frame() # 返回主页面 browser.switch_to.default_content()
7. 操作cookie
- 获取cookie:
driver.get_cookies()
- 根据cookie的key获取value:
value = driver.get_cookie(key)
- 删除所有的cookie:
driver.delete_all_cookies()
- 删除某个cookie:
driver.delete_cookie(key)
8. 隐式等待和显式等待
- 隐式等待:指定一个时间,在这个时间内一直会处于等待状态。隐式等待需要使用
driver.implicitly_wait
。 - 显式等待:指定在某个时间内,如果某个条件满足了,那么就不会再等待。显式等待用的方法是
from selenium.webdriver.support.ui import WebDriverWait
。
9.上例子
from selenium import webdriver # # 驱动浏览器
from selenium.webdriver.common.by import By #选择器
from selenium.webdriver.common.keys import Keys #按键
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载完毕,寻找某些元素
from selenium.webdriver.support import expected_conditions as EC ##等待指定标签加载完毕
# 1,驱动浏览器
browser = webdriver.Chrome()
# 2,请求页面 --返回的数据封装在了browser对象里,不需要额外的变量接收
browser.get('https://www.baidu.com') #调用浏览器驱动访问站点
# 3,拿到输入框
# text_input = browser.find_element_by_id('kw')
text_input = browser.find_element(By.ID,'kw')
# 4,向输入框中写入内容
text_input.send_keys('爬虫')
# 5,按下回车按钮
text_input.send_keys(Keys.ENTER)
# 等待事件 -- 怕网速慢
wait = WebDriverWait(browser,100) # 参数1:浏览器对象 参数2:时间(秒)
# 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
wait.until(EC.presence_of_element_located((By.ID,'result_tts_player')))
print(browser.current_url) #查看url
print(browser.get_cookies()) #查看cookie
print(browser.page_source) #查看源代码
browser.close() # 关闭浏览器
到了这里,关于selenium和webdriver的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!