Python网络数据采集6-隐含输入字段
Python网络数据采集6-隐含输入字段
selenium的get_cookies可以轻松获取所有cookie。
from pprint import pprint
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=r'C:\Program Files (x86)\phantomjs\bin\phantomjs.exe')
driver.get('https://pythonscraping.com')
# 可以隐式等待几秒
driver.implicitly_wait(1)
pprint(driver.get_cookies())
driver.close()
[{'domain': '.pythonscraping.com',
'expires': '周三, 19 7月 2017 01:54:21 GMT',
'expiry': 1500429261,
'httponly': False,
'name': '_gat',
'path': '/',
'secure': False,
'value': '1'},
{'domain': '.pythonscraping.com',
'expires': '周四, 20 7月 2017 01:53:21 GMT',
'expiry': 1500515601,
'httponly': False,
'name': '_gid',
'path': '/',
'secure': False,
'value': 'GA1.2.1017155976.1500429202'},
{'domain': '.pythonscraping.com',
'expires': '周五, 19 7月 2019 01:53:21 GMT',
'expiry': 1563501201,
'httponly': False,
'name': '_ga',
'path': '/',
'secure': False,
'value': 'GA1.2.548627101.1500429202'},
{'domain': 'pythonscraping.com',
'httponly': False,
'name': 'has_js',
'path': '/',
'secure': False,
'value': '1'}]
除此之外,还可以使用
get_cookie(name)获取Cookie字典中键为name的值add_cookie(cookie_dict)添加Cookiedelete_cookie(name)删除Cookie中某个键delete_all_cookies()删除所有Cookie
陷阱--隐含输入字段
在HTML表单中,“隐含”字段可以让字段的值对浏览器可见,但是对用户不可见(除非看网页源代码)。隐含字段主要用于阻止爬虫自动提交表单。用隐含字段组织网络采集的方式主要有两种。
第一种是表单页面上的某个字段可以用服务器生成的随机变量表示。如果提交时候这个值没有填写或者填写错误(与服务端存储的“答案”不一致),那么服务器就会拒绝我们的请求。
第二种方式是有些隐藏起来的普通字段,比如username和email写爬虫的可能看到这些字段就像填写,这是一个圈套。服务器会将所有填入的隐含字段的值(或者与表单提交页面默认值不同的值)忽略,而且填写了这些隐含字段的用户可能被网站封杀。比如这个网站网页源码如下。
<html><head>
<title>A bot-proof form</title>
<style>
body {
overflow-x:hidden;
}
.customHidden {
position:absolute;
right:50000px;
}
</style><style></style></head>
<body>
<h2>A bot-proof form</h2>
<a style="display:none;" href="http://pythonscraping.com/dontgohere">Go here!</a>
<a href="http://pythonscraping.com">Click me!</a>
<form>
<input name="phone" type="hidden" value="valueShouldNotBeModified"><p>
<input name="email" class="customHidden" type="text" value="intentionallyBlank"></p><p>
<input name="firstName" type="text"></p><p>
<input name="lastName" type="text"></p><p>
<input type="submit" value="Submit"></p><p>
</p></form>
</body></html>
看到有一段<style>了吗?这个页面包含了两个链接,一个通过CSS隐藏了,另外一个可见(Click me!)另外页面还有两个隐含字段。他们分别是:
- 第一个链接通过CSS属性设置
style="display:none"进行隐藏 - 电话号码
name="phone"指定了type="hidden" - 邮箱地址
name="email"指定了一个自定义的隐藏,它将元素向右移动50000像素,应该都超出电脑显示器的边界了,而且隐藏了滚动条。
使用selenium的is_displayed()可以区分页面上的可见元素和不可见元素。
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=r'C:\Program Files (x86)\phantomjs\bin\phantomjs.exe')
driver.get('http://pythonscraping.com/pages/itsatrap.html')
links = driver.find_elements_by_tag_name('a')
for link in links:
if not link.is_displayed():
print(link.get_attribute('href'), 'is a trap!')
fields = driver.find_elements_by_tag_name('input')
for field in fields:
if not field.is_displayed():
print("Don't change the value of", field.get_attribute('name'))
http://pythonscraping.com/dontgohere is a trap!
Don't change the value of phone
Don't change the value of email
by @sunhaiyu
2017.7.19
Python网络数据采集6-隐含输入字段的更多相关文章
- 笔记之Python网络数据采集
笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...
- Python网络数据采集PDF高清完整版免费下载|百度云盘
百度云盘:Python网络数据采集PDF高清完整版免费下载 提取码:1vc5 内容简介 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第 ...
- Python网络数据采集7-单元测试与Selenium自动化测试
Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...
- 20190715《Python网络数据采集》第 1 章
<Python网络数据采集>7月8号-7月10号,这三天将该书精读一遍,脑海中有了一个爬虫大体框架后,对于后续学习将更加有全局感. 此前,曾试验看视频学习,但是一个视频基本2小时,全部拿下 ...
- 《python 网络数据采集》代码更新
<python 网络数据采集>这本书中会出现很多这一段代码: 1 from urllib.request import urlopen 2 from bs4 import Beautifu ...
- Python网络数据采集4-POST提交与Cookie的处理
Python网络数据采集4-POST提交与Cookie的处理 POST提交 之前访问页面都是用的get提交方式,有些网页需要登录才能访问,此时需要提交参数.虽然在一些网页,get方式也能提交参.比如h ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
- Python网络数据采集2-wikipedia
Python网络数据采集2-wikipedia 随机链接跳转 获取维基百科的词条超链接,并随机跳转.可能侧边栏和低栏会有其他链接.这不是我们想要的,所以定位到正文.正文在id为bodyContent的 ...
- Python网络数据采集1-Beautifulsoup的使用
Python网络数据采集1-Beautifulsoup的使用 来自此书: [美]Ryan Mitchell <Python网络数据采集>,例子是照搬的,觉得跟着敲一遍还是有作用的,所以记录 ...
随机推荐
- docker 架构
看别的地方大致介绍的,粘贴过来 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关 ...
- arcgis api for js入门开发系列十一地图统计图
上一篇实现了demo的叠加SHP图层,本篇新增地图统计图,截图如下: 地图统计图实现的思路如下:利用拓展arcgis api的js文件(MapChartGraphic.js以及MapChartGrap ...
- Vulkan Tutorial 23 Descriptor layout and buffer
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 我们现在可以将任意属性传递给每个顶点的顶点着色器使用.但是 ...
- Administrator账户密码忘了怎么办
WIN7的Administrator账户密码忘了怎么办 1.准备一个带有winpe系统的系统光盘或者U盘 2.启动电脑,按F12选择U盘或者光盘启动,进入winpe操作系统 3.找到c:\wind ...
- Streaming输入输出
Structured Streaming 输入输出 输入 SparkSession.readStream() 返回一个 DataStreamReader 接口对象,可以通过该对象对输入源进行参数配置, ...
- linux+tomcat+jdk环境验证码无法显示
我的环境配置:RHEL6.5+tomcat6+jdk1.6 今天遇到一个奇怪的现象,我的tomcat启动起来之后,网站无法显示验证码,导致无法登陆.我的tomcat启动过程是这样的: 我有一个进程守护 ...
- cssradius
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- js的DOM操作
ID选择器:document.getElementById("").innerHTML="" class选择器:var divc= document.getEl ...
- JavaScript学习笔记(三)——留言板知操纵DOM节点
用JavaScript写了一个简易的留言板,暂不涉及数据库接入等. 1.功能以及流程 主要功能即为留言,用两个文本框接受用户输入的用户名以及留言内容,然后通过"提交留言"按钮将用户 ...
- js 监控iframe URL的变化
iframe的url可以前端任何地址,这样就可能出现漏洞,如果钓鱼网站通过js把src改成了危险地址,如果没有监控,就会有很大隐患.所以监控iframe的url变化就是必须要解决的问题了. 第一印象的 ...