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 模块名
声明不同浏览器对象
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() # 关闭当前页面
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()
from selenium import webdriver
options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
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)
selenium-iframe
网页中嵌套了网页,先切换到iframe
,然后再执行其他操作
切换到要处理的Frame
browser.switch_to.frame(frame节点对象)
在Frame中定位页面元素并进行操作
返回当前处理的Frame的上一级页面或主页面
# 返回上一级
browser.switch_to.parent_frame()
# 返回主页面
browser.switch_to.default_content()
driver.get_cookies()
value = driver.get_cookie(key)
driver.delete_all_cookies()
driver.delete_cookie(key)
driver.implicitly_wait
。from selenium.webdriver.support.ui import WebDriverWait
。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() # 关闭浏览器