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网络数据采集>,例子是照搬的,觉得跟着敲一遍还是有作用的,所以记录 ...
随机推荐
- 如何将mysql数据导入Hadoop之Sqoop安装
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle , ...
- css实现选项卡
<style> *{ margin: ; padding: ; text-decoration: none; list-style: none; outline:none; } .box{ ...
- javascript 闭包 转载
http://www.jb51.net/article/24101.htm var name = "the window"; var object = { name:"m ...
- linux软件包介绍
一. 软件包的种类 源码包 二进制包(rpm包.系统默认包) 二. 优缺点对比 源码包 源码包的优点 1) 开源,源码可见,且可以修改 2) 配置更加灵活,可以自由选择所需的功能 3) 软件是编译安装 ...
- Python 编码错误的本质原因
转载自:https://foofish.net/python-unicode-error.html 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久的新贵,你一定遇到过Uni ...
- django-xadmin数字输入框不支持小数点小数问题
环境:https://github.com/y2kconnect/xadmin-for-python3.git python3.5.2 django1.9.12 原因:数字输入框用的是html5 in ...
- WCF学习——构建第二个WCF应用程序(五)
一.创建数据服务 1.在“解决方案资源管理器”中,使用鼠标左键选中“WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 2.在“添加新项”对话框中,选择“Web”节点,然后选 ...
- Web自动化之Headless Chrome概览
Web自动化 这里所说的Web自动化是所有跟页面相关的自动化,比如页面爬取,数据抓取,页面内容检测,页面功能测试,页面加载性能测试,页面回归测试等等,当前主要由如下几种解决方式: 文本数据获取 这就是 ...
- 处理input标签的border-radius
给input设置border-radius效果时一定要先设置border属性,否则会出现左上部有阴影的效果.
- alibaba druid 在springboot start autoconfig 下的bug
alibaba druid 在springboot start autoconfig下的bug 标签(空格分隔):druid springboot start autoconfig 背景 发现.分析过 ...