# 动态HTML
## 爬虫跟反爬虫
## 动态HTML介绍
- JavaScrapt
- jQuery
- Ajax
- DHTML
- Python采集动态数据
- 从Javascript代码入手采集
- Python第三方库运行JavaScript,直接采集你在浏览器看到的页面
## Selenium + PhantomJS
- Selenium: web自动化测试工具
- 自动加载页面
- 获取数据
- 截屏
- 安装: pip install selenium==2.48.0
- 官网: http://selenium-python.readthedocs.io/index.html
- PhantomJS(幽灵)
- 基于Webkit 的无界面的浏览器
- 官网: http://phantomjs.org/download.html
- Selenium 库有一个WebDriver的API
- WebDriver可以跟页面上的元素进行各种交互,用它可以来进行爬取
- 案例 v36
- chrome + chromedriver
- 下载安装chrome: 下载+安装
- 下载安装chromedriver:
chromedriver 遇到的问题,请参考下篇内容https://blog.csdn.net/u013985879/article/details/82595431
from selenium import webdriver
"""
通过webdriver 操作百度进行查找
"""
from selenium.webdriver.common.keys import Keys
driver = webdriver.PhantomJS("")
driver.get("http://www.baidu.com")
print("Title..{}".format(driver.title))
- Selenium操作主要分两大类:
- 得到UI元素
- find_element_by_id
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
- 基于UI元素操作的模拟
- 单击
- 右键
- 拖拽
- 输入
- 可以通过导入ActionsChains类来做到
- 案例37
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("https://www.baidu.com")
text = driver.find_element_by_id("wrapper").text
"""
新闻
hao123
地图
视频
贴吧
学术
登录
设置
更多产品
百度
把百度设为主页关于百度About Baidu百度推广
©2018 Baidu 使用百度前必读 意见反馈 京ICP证030173号 京公网安备11000002000001号
"""
print(text)
#百度一下,你就知道
print(driver.title)
# 输入 大熊猫--3s ---点击---5s --daxiongmao.png
# ctrl+a ---2s --ctrl+x ---2s
# 输入 *** ->截图hangmu.png--回车--5s--截图hangmushow.png
# 清空输入框 -截图--退出
# 得到页面的快照
# driver.save_screenshot("index.png")
#id ='kw' 是百度搜索的按钮,我们得到输入框的ui 元素后直接输入大熊猫
driver.find_element_by_id("kw").send_keys(u"大熊猫")
time.sleep(3)
#id='su' 是百度搜索的按钮,click 模拟点击
driver.find_element_by_id("su").click()
time.sleep(5)
driver.save_screenshot("daxiongmao.png")
#获取当前页面的cookie
print(driver.get_cookies())
# 模拟ctr+a
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(2)
# 模拟ctr+X
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
time.sleep(2)
driver.find_element_by_id("kw").send_keys(u"***")
driver.save_screenshot("hangmu.png")
driver.find_element_by_id("su").send_keys(Keys.RETURN)
time.sleep(5)
driver.save_screenshot("hangmushow.png")
# 清空输入框
driver.find_element_by_id("kw").clear()
driver.save_screenshot("clear.png")
driver.quit()