java调用元素内容的动态变化及解决方案使用+PhantomJS
优采云 发布时间: 2021-07-19 04:24java调用元素内容的动态变化及解决方案使用+PhantomJS
前言
现在很多网站 使用 JavaScript 或 Ajax 技术。这样,网页加载后,虽然url没有变化,但是网页的DOM元素的内容可以动态变化。如果使用python自带的requests库或urllib库处理此类网页,获取的网页内容与浏览器中网页显示的内容不一致。
解决方案
使用 Selenium+PhantomJS。这两者一起可以运行一个非常强大的爬虫,它可以处理 cookie、JavaScript、标头和任何你想做的事情。
安装第三方库
Selenium 是一个强大的网络数据采集工具,最初是为网站自动化测试开发的,它有相应的Python库;
Selenium 安装命令:
pip install selenium
安装 PhantomJS
PhantomJS 是一个基于 webkit 内核的无头浏览器,即它没有 UI 界面,即是一个浏览器,但是点击、翻页等与人相关的操作需要通过编程来实现。通过编写js程序,可以直接与webkit内核交互,在此基础上还可以结合java语言等,通过java调用js等相关操作。需要到官网下载对应平台的压缩文件;
PhantomJS(phantomjs-2.1.1-windows)下载地址:根据不同系统选择对应版本
windows系统下载PhantomJs,将解压后的可执行文件放在环境变量设置好的地方。如果不设置,后面的代码会设置,所以直接放在这里很方便;
然后勾选,在cmd窗口输入phantomjs:
如果出现这样的画面,则表示成功;
对于Mac系统,下载保存到某个路径后,可以直接保存在环境改变的路径中,也可以在环境变量路径中创建一个phantomjs的软链接
ln -s /usr/local/opt/my/phantomjs-2.1.1-macosx/bin/phantomjs /usr/local/bin
测试代码:
from selenium import webdriver
<p>driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com/')
print (driver.page_source)</p>
如果能成功获取到页面元素,则说明安装成功。
示例 1:
Selenium+PhantomJS 示例代码:
from selenium import webdriver
<p>driver = webdriver.PhantomJS()
driver.get('http://www.cnblogs.com/feng0815/p/8735491.html')
#获取网页源码
data = driver.page_source
print(data)
#获取元素的html源码
tableData = driver.find_elements_by_tag_name('tableData').get_attribute('innerHTML')
#获取元素的id值
tableI = driver.find_elements_by_tag_name('tableData').get_attribute('id')
#获取元素的文本内容
tableI = driver.find_elements_by_tag_name('tableData').text
driver.quit()</p>
可以输出网页源码,说明安装成功
获取JS返回值