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网络数据采集>,例子是照搬的,觉得跟着敲一遍还是有作用的,所以记录 ...
随机推荐
- Paxos Made Simple(译)
The Paxos algorithm, when presented in plain English, is very simple. 我叫Leslie Lamport,我最屌. 1. 简介 用于 ...
- 用Html5/CSS3做Winform,一步一步教你搭建CefSharp开发环境(附JavaScript异步调用C#例子,及全部源代码)上
本文为鸡毛巾原创,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,转载请注明 CefSharp说白了就是Chromium浏览器的嵌入式核心,我们 ...
- 并发编程(四):ThreadLocal从源码分析总结到内存泄漏
一.目录 1.ThreadLocal是什么?有什么用? 2.ThreadLocal源码简要总结? 3.ThreadLocal为什么会导致内存泄漏? 二.ThreadLoc ...
- call, apply,bind 方法解析
call(), apply(),bind() 三者皆为Function的方法 call(),apply()的作用是调用方法,并改变函数运行时的context(作用上下文) bind() 的作用是引用方 ...
- .NET C#到Java没那么难,MVC篇
最典型的JAVA MVC就是JSP + servlet + javabean的模式.比较好的MVC,老牌的有Struts.Webwork.新兴的MVC 框架有Spring MVC.Tapestry.J ...
- (转载)iptables 转发oracle端口
本文出自 “乡丅亻” 博客,请务必保留此出处http://shaowu.blog.51cto.com/627407/514909 项目组同事需要将SQL请求转发到另一台服务器上,于是通过iptable ...
- English - Mosquitos
Smith's house is full of mosquitos. Every night they bite him. He can not sleep because the mosquito ...
- Vuejs——v-on
版权声明:出处http://blog.csdn.net/qq20004604 目录(?)[+] 资料来于官方文档: http://cn.vuejs.org/guide/events.html ...
- 大数据平台搭建-kafka集群的搭建
本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集 ...
- [USACO09OCT]热浪Heat Wave
未经同意,不得转载. The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make ...