python爬取禅道页面特定的人员所提的bug数,试了很多方法,发现访问的结果都是一致的,怎么解决?

2020-09-18 09:48:07
廖荣玄
  • 访问次数: 5
  • 注册日期: 2020-09-18
  • 最后登录: 2021-04-25
  • 我的积分: 78
  • 门派等级: 无门派

在学习python爬虫,要爬取我们公司所用禅道的特定人员所提bug数。
通过F12开发者工具看到总的有3个有用的网页,两个是get请求,一个是post请求

然后我写了代码,尝试用requests.post带着参数去请求这个唯一的post,发现地址写的为post这个地址时,响应是错误的。

response = session.post('http://zentaopms.jjshebao.com/index.php?m=search&f=buildQuery', data = postData,headers = header)

返回的结果如下

<html><meta charset='utf-8'/><style>body{background:white}</style><script>parent.location=' /index.php?m=bug&f=browse&productID=3&branch=0&browseType=bySearch&queryID=myQueryID';

这个最后这段地址,是其中一个get页面的地址。
如果我将post请求中的地址,直接换成这个地址

response = session.post('http://zentaopms.jjshebao.com/index.php?m=bug&f=browse&productID=3&branch=0&browseType=bySearch&queryID=myQueryID', data = postData,headers = header)

则会返回结果。
以上是我第一个疑惑点,为什么我请求的时候,要用的是另外一个地址。

还有一个问题,我现在是要爬取不同人员所提的bug数,那我就给其中一个参数是不一样的。对了每次的结果,发现是其中这个值对应每次的人员不同。
图片说明
但是我在脚本这边将值替换之后,查询出来的结果每次都是一致的。而且不是固定的,而是我在页面操作,比如选择“人员A”进行搜索,搜索出结果,那我此时到python这边运行脚本,则无论参数换成哪个人员,结果都是人员A的结果。
还有一点提一下,因为这个禅道是要登录才能到这个页面,所以我是将cookie写死在header里了。

对了。上述提到的,我的入参数据格式都是打错了,用的json格式。后来换成form-data格式后,有提示“http.client.RemoteDisconnected: Remote end closed connection without response”。当然了。post的还是最长的那个网址(本身是get获取到的,也就是actionURL后的那个地址)。代码段如下:

#form-data的数据格式
formData1 = 'fieldtitle=&fieldkeywords=&fieldsteps=&fieldassignedTo=&fieldresolvedBy=&fieldstatus=&fieldconfirmed=ZERO&fieldproduct=2&fieldplan=&fieldmodule=ZERO&fieldproject=&fieldseverity=0&fieldpri=0&fieldtype=&fieldos=&fieldbrowser=&fieldresolution=&fieldactivatedCount=&fieldtoTask=&fieldtoStory=&fieldopenedBy=&fieldclosedBy=&fieldlastEditedBy=&fieldmailto=&fieldopenedBuild=&fieldresolvedBuild=&fieldopenedDate=&fieldassignedDate=&fieldresolvedDate=&fieldclosedDate=&fieldlastEditedDate=&fielddeadline=&fieldid=&andOr1=AND&field1=openedBy&operator1=%3D&value1=liaorongxuan&andOr2=and&field2=id&operator2=%3D&value2=&andOr3=and&field3=keywords&operator3=include&value3=&groupAndOr=and&andOr4=AND&field4=steps&operator4=include&value4=&andOr5=and&field5=assignedTo&operator5=%3D&value5=&andOr6=and&field6=resolvedBy&operator6=%3D&value6=&module=bug&actionURL=%2Findex.php%3Fm%3Dbug%26f%3Dbrowse%26productID%3D2%26branch%3D0%26browseType%3DbySearch%26queryID%3DmyQueryID&groupItems=3&formType=lite'
#创建session
session = requests.session()
#调用post进行请求,添加参数以及信息头
response1 = session.post("http://zentaopms.jjshebao.com/index.php?m=bug&f=browse&productID=2&branch=0&browseType=bySearch&queryID=myQueryID", data=formData1, headers=header)

如果是直接get,不给参数,则是会有错误提示。看样子,好像是提示未登录的情况?最后referer后边的值,是一串加密后的码。

<html><meta charset='utf-8'/><style>body{background:white}</style><script>self.location='/index.php?m=user&f=login&referer=XXXXXXXX';

然后我试了一下,只要访问的时候,不论是requests.post还是get;或者是session.post或get,到最后返回的结果都是一模一样的,还是我在页面操作时,搜索了谁提的bug,我运行脚本后,最后得出的结果就是谁所提的bug数。
但是我对了一下,搜索条件变了,出来结果不一样,cookie的值也是一模一样的,同个网址的信息头也都是一模一样的,就是参数那边变了。
那我在脚本这边,改了参数,返回的结果都是网页那边设置的人员的结果。

最后提一点,刚刚仔细看了眼信息头,发现了访问的一些规律
1.其中一个get地址,是从那个post请求发起的访问

2.另外两个地址,显示的都是从第一点中提到的这个地址访问的

所以我现在也很懵,在写脚本的时候,到底要访问哪个地址? 访问那个post的地址吧,返回的又是错误的(上方有提到),访问get吧,那这个post要怎么去调用它,使它能够获得正确的数据呢,不然直接得到的数据,都是一致的。
我刚看到帖子说,禅道的搜索信息是保存在session中,那要怎么操作呢?

廖荣玄 最后编辑, 2020-09-24 10:28:37
沙发
2020-09-18 17:16:27
禅道-Bee
  • 访问次数: 5099
  • 注册日期: 2017-02-22
  • 最后登录: 2024-04-19
  • 我的积分: 40969
  • 门派等级: 幽灵 等级5 天魔
方便的话,图片可以重新上传下吗?
板凳
2020-09-23 14:23:48 回复#1
廖荣玄
  • 访问次数: 5
  • 注册日期: 2020-09-18
  • 最后登录: 2021-04-25
  • 我的积分: 78
  • 门派等级: 无门派
原帖由 禅道-Bee 于 2020-09-18 17:16:27 发表

方便的话,图片可以重新上传下吗?


好的。 那我是需要重新开一个帖子么?  

现在图片是看不到么?

#3
2020-09-23 17:29:25
张玉洁
  • 访问次数: 1714
  • 注册日期: 2019-03-14
  • 最后登录: 2021-08-20
  • 我的积分: 6592
  • 门派等级: 无门派

目前访问时图片无法正常显示(如下图所示),方便的话可以登录官网后,重新编辑这个帖子上传一下图片。

如果找不到帖子编辑按钮,可以添加网页上方QQ,我们给您发送截图看一下具体位置。

张玉洁 最后编辑, 2020-09-23 17:32:14
#4
2020-09-24 10:29:11 回复#3
廖荣玄
  • 访问次数: 5
  • 注册日期: 2020-09-18
  • 最后登录: 2021-04-25
  • 我的积分: 78
  • 门派等级: 无门派
原帖由 张玉洁 于 2020-09-23 17:29:25 发表

目前访问时图片无法正常显示(如下图所示),方便的话可以登录官网后,重新编辑这个帖子上传一下图片。

如果找不到帖子编辑按钮,可以添加网页上方QQ,我们给您发送截图看一下具体位置。

您好,帮忙看一下,现在的描述可以了嘛。 我重新截图进来了

#5
2020-09-24 10:32:38
廖荣玄
  • 访问次数: 5
  • 注册日期: 2020-09-18
  • 最后登录: 2021-04-25
  • 我的积分: 78
  • 门派等级: 无门派
现在求助一下。 我重新写了登录的请求,登录成功后获取到session,再用session.post去访问网站,每次的结果都一样。 而且这次不会随着页面那边的操作而改变,就是每次都是第一次访问的那个结果。
#6
2020-09-24 16:00:00
石洋洋
  • 访问次数: 6461
  • 注册日期: 2011-04-06
  • 最后登录: 2024-04-19
  • 我的积分: 96502
  • 门派等级: 幽灵 等级6 修罗

1、搜索的请求是依赖session数据的,当前状态模拟post需要确认一下session值是否设置上了,如果没有设置上返回的结果都是一样的。

2、关于禅道需要登录才能访问的问题可以参考:https://www.zentao.net/book/zentaopmshelp/344.html

3、禅道中可以搜索后保存搜索条件为菜单,下次直接点击菜单就可以快速搜索,另外禅道收费版本也可以直接写sql查询相应的数据并且保存成报表,需要可以联系本网页最上方的QQ或者电话。

4、python这块我们没有用过不太熟悉,可能帮不太上什么忙,需要您再研究一下了。

石洋洋 最后编辑, 2020-09-24 16:00:50
1/1 1