Python爬虫 Selenium(六)
文章目录
- 简介
- 示例
- 元素定位、交互
- 4.72版本示例(注意语法差别)
- Chrome handless
简介
1.什么是selenium?
(1)Selenium是一个用于Web应用程序测试的工具。
(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。
(4)selenium也是支持无界面浏览器操作的。
2.为什么使用selenium?
模拟浏览器功能,自动执行网页中的js代码,实现动态加载
在真实网页系统中,很多数据是由js加载进入html页面,部分数据是通过懒加载实现,如果直接爬去源码是无法获取到相对应的dom的数据
示例
安装
如何安装selenium?
(1)操作谷歌浏览器驱动下载地址
http://chromedriver.storage.googleapis.com/index.html
(2)谷歌驱动和谷歌浏览器版本之间的
映射表
http://blog.csdn.net/huilan_same/article/details/51896672
(3)查看谷歌浏览器版本
谷歌浏览器右上角‐‐>帮助‐‐>关于
(4)pip install selenium
使用
(1)导入:
from selenium import webdriver
(2)创建谷歌浏览器操作对象:
path = 谷歌浏览器驱动文件路径
browser = webdriver.Chrome(path)
(3)访问网址
url = 要访问的网址 browser.get(url)
元素定位、交互
selenium的元素定位?元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等。操作这些元素前首先要找到它们,WebDriver提供很多定位元素的方法
方法:
1.find_element_by_id
eg:button =browser.find_element_by_id('su')
2.find_elements_by_name
eg:name = browser.find_element_by_name('wd')
3.find_elements_by_xpath
eg:xpath1 = browser.find_elements_by_xpath('//input[@id="su"]')
4.find_elements_by_tag_name
eg:names = browser.find_elements_by_tag_name('input')
5.find_elements_by_css_selector
eg:my_input = browser.find_elements_by_css_selector('#kw')[0]
6.find_elements_by_link_text
eg:browser.find_element_by_link_text("新闻")
eg:browser.find_element_by_link_text("新闻")
6. 访问元素信息 获取元素属性
.get_attribute('class') 获取元素文本
.text 获取内容
.tag_name 获取标签名
交互
点击:click()
输入:send_keys()
后退操作:browser.back()
前进操作:browser.forword()
模拟JS滚动:js='document.documentElement.scrollTop=100000'
browser.execute_script(js) 执行js代码
获取网页代码:page_source
退出:browser.quit()
4.72版本示例(注意语法差别)
import time
from selenium import webdriver
# 驱动地址
from selenium.webdriver.common.by import By
path = 'chromedriver'
# 访问地址
url = 'https://www.baidu.com/'
# 创建谷歌浏览器操作对象:
browser = webdriver.Chrome(path)
# 打开页面
browser.get(url)
# 实现自动输入周杰伦翻译效果
input = browser.find_element(by=By.ID, value='kw')
input.send_keys('周杰伦')
button = browser.find_element(by=By.ID, value='su')
button.click()
time.sleep(2)
# 执行js代码 滚动到底部
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
# 点击下一页
page1 = browser.find_element(by=By.XPATH, value='//*[@id="page"]/div/a[8]/span')
page1.click()
time.sleep(5)
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
time.sleep(5)
# 回退
browser.back()
time.sleep(5)
Chrome handless
Chrome-headless模式,Google针对Chrome浏览器 59版新增加的一种模式,可以让你不打开UI界面的情况下使用Chrome浏览器,所以运行效果与Chrome保持完美一致
示例
import time
# 驱动地址
from selenium.webdriver.common.by import By
# 这个是浏览器自带的 不需要我们再做额外的操作
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
# 封装
def share_browser(): # 初始化
chrome_options = Options()
# 注意参数这个版本不需要--
chrome_options.add_argument('headless')
chrome_options.add_argument('disable‐gpu')
# 浏览器的安装路径 打开文件位置 #这个路径是你谷歌浏览器的路径
# path = r'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
# chrome_options.binary_location = path
browser = webdriver.Chrome(options=chrome_options,)
return browser
path = 'chromedriver'
# 访问地址
url = 'https://www.baidu.com/'
# 创建谷歌浏览器操作对象:
browser = share_browser()
# 打开页面
browser.get(url)
browser.save_screenshot('baidu1.png')
# 实现自动输入周杰伦翻译效果
input = browser.find_element(by=By.ID, value='kw')
input.send_keys('周杰伦')
button = browser.find_element(by=By.ID, value='su')
button.click()
browser.save_screenshot('baidu2.png')
time.sleep(2)
# 执行js代码 滚动到底部
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
# 点击下一页
page1 = browser.find_element(by=By.XPATH, value='//*[@id="page"]/div/a[8]/span')
page1.click()
browser.save_screenshot('baidu3.png')
time.sleep(5)
js = 'document.documentElement.scrollTop=100000'
browser.execute_script(js)
browser.save_screenshot('baidu4.png')
time.sleep(5)
# 回退
browser.back()
browser.save_screenshot('baidu5.png')
time.sleep(5)