python模拟访问网页(python模拟浏览器访问)
新手,python怎么模拟网页按钮点击
首页,我们先理解网页点击的本质:
其实,站在数据底层理解,我们对网页的操作可以抽象成向服务器发送数据。
这样看来,我们有两种方法使用Python模拟网页按钮点击:
方法一:间接模拟。模拟向服务器发送数据。可以用抓包工具,看点击按钮时到底向服务器发送的是什么数据,然后使用python模拟发送的数据。
方法二:真实模拟。可以先找到按钮,然后执行点击。这个有现成的库,Selenium。
python爬虫模拟登陆网站
你可以结合使用requests和selenium这两个python模块来实现半自动化模拟登录。
#?-*-?coding:?utf-8?-*-
import?time
import?requests
from?requests.sessions?import?cookiejar_from_dict
from?selenium?import?webdriver
LOGIN_URL?=?''
driver?=?webdriver.Firefox()
driver.get(LOGIN_URL)
time.sleep(30)
cookies?=?{}
for?cookie?in?driver.get_cookies():
????cookies[cookie['name']]?=?cookie['value']
driver.quit()
print?cookies
#?cookies?=?{}
headers?=?{
????'User-Agent':?'Mozilla/5.0?(Windows?NT?6.1;?WOW64;?rv:24.0)?Gecko/20100101?Firefox/24.0',
????'Accept':?'*/*',
????'Connection':?'keep-alive',
}
cookies?=?cookiejar_from_dict(cookies)
rep?=?requests.get('',?cookies=cookies,?headers=headers)
print?rep.text
如果解决了您的问题请采纳!
如果未解决请继续追问
什么库可以模拟客户端请求网页访问过程
Python。
使用python模仿人为访问网站主要有以下几个方面:
1、请求发送访问后,服务器接收到的最直接的感觉就是请求了,所以,首先请求头要和浏览器的请求一样,目前主要是User-Agent、Host、Referer等。
2、请求频率,机器的访问速度一定是比人的请求速度快的多,如果你一秒有几十条请求的话,系统会分辨你是一个爬虫,可以使程序休息一会等方式。
3、cookie,用户访问网站时是伴随着cookie的,cookie中保存着登陆信息等,这种可以使用session来实现。
4、资源请求,当访问一个页面时,一般不会是一个只有一个html文件,同时伴随着一些资源的请求,比如css,jpg,json等,而爬虫一般不会把这些资源全部请求,当然可以使用浏览器自动化控制模块(selenium等)来实现操控浏览器来请求。
5、验证码等,有些页面会伴随着验证码,使用验证码来判定访问者是一个人还是机器。
如何用python模拟登录jsp网站
简单说一下流程:先用cookielib获取cookie,再用获取到的cookie,进入需要登录的网站。
01 # -*- coding: utf-8 -*-
02 # !/usr/bin/python
03
04 import urllib2
05 import urllib
06 import cookielib
07 import re
08
09 auth_url = ''
10 home_url = '';
11 # 登陆用户名和密码
12 data={
13 "username":"nowamagic",
14 "password":"pass"
15 }
16 # urllib进行编码
17 post_data=urllib.urlencode(data)
18 # 发送头信息
19 headers ={
20 "Host":"",
21 "Referer": ""
22 }
23 # 初始化一个CookieJar来处理Cookie
24 cookieJar=cookielib.CookieJar()
25 # 实例化一个全局opener
26 opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
27 # 获取cookie
28 req=urllib2.Request(auth_url,post_data,headers)
29 result = opener.open(req)
30 # 访问主页 自动带着cookie信息
31 result = opener.open(home_url)
32 # 显示结果
33 print result.read()
再附带几个示例程序:
1. 使用已有的cookie访问网站
01 import cookielib, urllib2
02
03 ckjar = cookielib.MozillaCookieJar(os.path.join('C:\Documents and Settings\tom\Application Data\Mozilla\Firefox\Profiles\h5m61j1i.default', 'cookies.txt'))
04
05 req = urllib2.Request(url, postdata, header)
06
07 req.add_header('User-Agent', \
08 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
09
10 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) )
11
12 f = opener.open(req)
13 htm = f.read()
14 f.close()
2. 访问网站获得cookie,并把获得的cookie保存在cookie文件中
01 import cookielib, urllib2
02
03 req = urllib2.Request(url, postdata, header)
04 req.add_header('User-Agent', \
05 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
06
07 ckjar = cookielib.MozillaCookieJar(filename)
08 ckproc = urllib2.HTTPCookieProcessor(ckjar)
09
10 opener = urllib2.build_opener(ckproc)
11
12 f = opener.open(req)
13 htm = f.read()
14 f.close()
15
16 ckjar.save(ignore_discard=True, ignore_expires=True)
3. 使用指定的参数生成cookie,并用这个cookie访问网站
01 import cookielib, urllib2
02
03 cookiejar = cookielib.CookieJar()
04 urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
05 values = {'redirect':", 'email':'abc@abc.com',
06 'password':'password', 'rememberme':", 'submit':'OK, Let Me In!'}
07 data = urllib.urlencode(values)
08
09 request = urllib2.Request(url, data)
10 url = urlOpener.open(request)
11 print url.info()
12 page = url.read()
13
14 request = urllib2.Request(url)
15 url = urlOpener.open(request)
16 page = url.read()
17 print page
python获取cookie后怎么模拟登陆网站
运行平台:Windows
Python版本:Python3.x
IDE:Sublime text3
一、为什么要使用Cookie
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。
使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。
http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它们的关系:?CookieJar–派生–FileCookieJar–派生–MozillaCookieJar和LWPCookieJar
工作原理:创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。查看登录之后才能看到的信息。
同样,我们以实例进行讲解,爬取伯乐在线的面向对象的漂亮MM的邮箱联系方式。
二、实战
1.背景介绍
在伯乐在线有这么一个有趣的模块,面向对象,它说白了就是提供了一个程序员(媛)网上相亲的平台。
URL:
它的样子是这样的:
可以看到,这里有很多的相亲贴,随便点进去就会有网上相亲MM的详细信息,想获取MM的联系方式,需要积分,积分可以通过签到的方式获取。如果没有登陆账户,获取联系方式的地方是这个样子的:
如果登陆了账号,获取联系方式的地方是这个样子的:
想要爬取MM的联系邮箱,就需要用到我们本次讲到的知识,Cookie的使用。当然,首先你积分也得够。
在讲解之前,推荐一款抓包工具–Fiddler,可以在Google Chrome的Google商店下载这个插件,它的样子是这样的:
可以看到,通过这个插件,我们可以很容易找到Post的Form Data等信息,很方便,当然也可以用之前讲得浏览器审查元素的方式查看这些信息。
2.过程分析
在伯乐在线首页点击登陆的按钮,Fiddler的抓包内容如下:
从上图可以看出,真正请求的url是
Form Data的内容记住,这些是我们编程需要用到的。user_login是用户名,user_pass是用户密码。
在点击取得联系邮箱按钮的时候,Fiddler的抓包内容如下:
从上图可以看出,此刻真正请求的url是
同样Form Data中内容要记下来。postId是每个帖子的id。例如,打开一个相亲贴,它的URL是28/,那么它的这个postId就是4128。为了简化程序,这里就不讲解如何自动获取这个postId了,本实例直接指定postId。如果想要自动获取,可以使用beautifulsoup解析/返回的信息。beautifulsoup的使用。有机会的话,会在后面的爬虫笔记中进行讲解。
3.测试
1)将Cookie保存到变量中
首先,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中,先来感受一下:
# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__': ? ?#声明一个CookieJar对象实例来保存cookie
cookie = cookiejar.CookieJar() ? ?#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
handler=request.HTTPCookieProcessor(cookie) ? ?#通过CookieHandler创建opener
opener = request.build_opener(handler) ? ?#此处的open方法打开网页
response = opener.open('httdu.com') ? ?#打印cookie信息
for item in cookie:
print('Name = %s' % item.name)
print('Value = %s' % item.value)1234567891011121314151617
我们使用以上方法将cookie保存到变量中,然后打印出了cookie中的值,运行结果如下:
2)保存Cookie到文件
在上面的方法中,我们将cookie保存到了cookie这个变量中,如果我们想将cookie保存到文件中该怎么做呢?方便以后直接读取文件使用,这时,我们就要用到FileCookieJar这个对象了,在这里我们使用它的子类MozillaCookieJar来实现Cookie的保存,编写代码如下:
# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__': ? ?#设置保存cookie的文件,同级目录下的cookie.txt
filename = 'cookie.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookiejar.MozillaCookieJar(filename) ? ?#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
handler=request.HTTPCookieProcessor(cookie) ? ?#通过CookieHandler创建opener
opener = request.build_opener(handler) ? ?#此处的open方法打开网页
response = opener.open('h.com') ? ?#保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)123456789101112131415161718
cookie.save的参数说明:
ignore_discard的意思是即使cookies将被丢弃也将它保存下来;
ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入。
在这里,我们将这两个全部设置为True。
运行之后,cookies将被保存到cookie.txt文件中。我们可以查看自己查看下cookie.txt这个文件的内容。
3)从文件中获取Cookie并访问
我们已经做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法来读取cookie并访问网站,感受一下:
# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__': ? ?#设置保存cookie的文件的文件名,相对路径,也就是同级目录下
? ?filename = 'cookie.txt'
? ?#创建MozillaCookieJar实例对象
? ?cookie = cookiejar.MozillaCookieJar() ? ?#从文件中读取cookie内容到变量
? ?cookie.load(filename, ignore_discard=True, ignore_expires=True) ? ?#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
? ?handler=request.HTTPCookieProcessor(cookie) ? ?#通过CookieHandler创建opener
? ?opener = request.build_opener(handler) ? ?#此用opener的open方法打开网页
? ?response = opener.open('httcom') ? ?#打印信息
? ?print(response.read().decode('utf-8'))12345678910111213141516171819
了解到以上内容,我们那就可以开始正式编写模拟登陆伯乐在线的程序了。同时,我们也可以获取相亲MM的联系方式。
4.编写代码
我们利用CookieJar对象实现获取cookie的功能,存储到变量中。然后使用这个cookie变量创建opener,使用这个设置好cookie的opener即可模拟登陆,同笔记四中讲到的IP代理的使用方法类似。
创建cookie_test.py文件,编写代码如下:
# -*- coding: UTF-8 -*-from urllib import requestfrom urllib import errorfrom urllib import parsefrom http import cookiejarif __name__ == '__main__': ? ?#登陆地址
? ?login_url = 'hin/admin-ajax.php' ? ?
? ?#User-Agent信息 ? ? ? ? ? ? ? ? ?
? ?user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
? ?#Headers信息
? ?head = {'User-Agnet': user_agent, 'Connection': 'keep-alive'} ? ?#登陆Form_Data信息
? ?Login_Data = {}
? ?Login_Data['action'] = 'user_login'
? ?Login_Data['redirect_url'] = 'hobbole.com/'
? ?Login_Data['remember_me'] = '0' ? ? ? ? #是否一个月内自动登陆
? ?Login_Data['user_login'] = '********' ? ? ? #改成你自己的用户名
? ?Login_Data['user_pass'] = '********' ? ? ? ?#改成你自己的密码
? ?#使用urlencode方法转换标准格式
? ?logingpostdata = parse.urlencode(Login_Data).encode('utf-8') ? ?#声明一个CookieJar对象实例来保存cookie
? ?cookie = cookiejar.CookieJar() ? ?#利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
? ?cookie_support = request.HTTPCookieProcessor(cookie) ? ?#通过CookieHandler创建opener
? ?opener = request.build_opener(cookie_support) ? ?#创建Request对象
? ?req1 = request.Request(url=login_url, data=logingpostdata, headers=head) ? ?#面向对象地址
? ?date_url = 'htt/wp-admin/admin-ajax.php'
? ?#面向对象
? ?Date_Data = {}
? ?Date_Data['action'] = 'get_date_contact'
? ?Date_Data['postId'] = '4128'
? ?#使用urlencode方法转换标准格式
? ?datepostdata = parse.urlencode(Date_Data).encode('utf-8')
? ?req2 = request.Request(url=date_url, data=datepostdata, headers=head) ? ?try: ? ? ? ?#使用自己创建的opener的open方法
? ? ? ?response1 = opener.open(req1)
? ? ? ?response2 = opener.open(req2)
? ? ? ?html = response2.read().decode('utf-8')
? ? ? ?index = html.find('jb_contact_email') ? ? ? ?#打印查询结果
? ? ? ?print('联系邮箱:%s' % html[index+19:-2]) ? ?except error.URLError as e: ? ? ? ?if hasattr(e, 'code'):
? ? ? ? ? ?print("HTTPError:%d" % e.code) ? ? ? ?elif hasattr(e, 'reason'):
? ? ? ? ? ?print("URLError:%s" % e.reason)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
5.运行结果如下:
三、总结
获取成功!如果看过之前的笔记内容,我想这些代码应该很好理解吧。