发送 __doPostBack 加入 Roblox 中的群组

问题描述 投票:0回答:1

Roblox 是一款游戏,您还可以组建群组(就像其他游戏中的部落一样)。

我正在制作一个程序来遍历这些组页面,并检查它们是否有所有者。如果还没有主人,那就加入群组成为主人吧

我这样做是为了从非拥有团体收集一些数据。

最后,我希望它在收集完数据后就离开群组。

这是“加入群组”按钮:

<div id="ctl00_cphRoblox_JoinGroup" class="btn-neutral btn-large" onclick="__doPostBack('JoinGroupDiv', 'Click');" style="margin-top: 10px;">
    Join Group
</div>

这是我尝试过的代码片段:

import requests
s = requests.session()
Join_Group = dict('JoinGroupDiv', 'Click')
s.post('http://www.roblox.com/Groups/Group.aspx?gid=40', data=Join_Group)

我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\User\Desktop\Group.py", line 18, in <module>
    Join_Group = dict('JoinGroupDiv', 'Click')
TypeError: dict expected at most 1 arguments, got 2

我很确定我不应该向页面发送 Post 请求,因为要加入组,它会执行 onClick 事件。

编辑1:

这是我更新的代码:

import requests
s = requests.session()
Join_Group = {"__EVENTTARGET":"ctl00_cphRoblox_JoinGroup", "__EVENTARGUMENT":"JoinGroupDiv"}
s.post('http://www.roblox.com/Groups/Group.aspx?gid=40', data=Join_Group)

但我不太知道要传递什么作为事件参数。我没有收到任何错误,但当我在 Google Chrome 中加载页面时,它并没有说我已尝试加入。

编辑2: 我也尝试过这个:

import requests
s = requests.session()
Join_Group = {"__EVENTTARGET":"ctl00_cphRoblox_JoinGroup", "__EVENTARGUMENT":{"JoinGroupDiv","Click"}}
s.post('http://www.roblox.com/Groups/Group.aspx?gid=40', data=Join_Group)

编辑3: 所以我这里拥有的是更新后的 Join_Group ,其中包含所有必要的字段,但不是所有信息。我不知道从哪里获取信息。

Join_Group = {"__EVENTTARGET":"JoinGroupDiv", "__EVENTARGUMENT":"Click", "__LASTFOCUS":"", "__VIEWSTATE":"a lot of mumbo jumbo", "__VIEWSTATEGENERATOR":"It is 3D1CCC47 but that might change per post", "__EVENTVALIDATION":"some more mumbo jumbo"}

这是一个正确的示例 POST,但我不知道它从哪里获取

__VIEWSTATE
__VIEWSTATEGENERATOR
__EVENTVALIDATION
的信息。

__EVENTTARGET=JoinGroupDiv&__EVENTARGUMENT=Click&__LASTFOCUS=&__VIEWSTATE=fM9l9%2BTw8z%2FRNbMArorqQ7HQ2w3soDiNp5gJOc5sNNQPEzEzApHiWLOHghGcAriUGv6pCVCi15my4%2BUxUozLVQyGx%2Fiq%2FU9BxRdN80kWJgMyiIyZYtSnfsvlFkqmrHaLIMNKag4eYwnKi5K3TP6JpP5xAxfNIOjekh6vpSa84YVL6eOwPsh5vqlHSN9VjFlwjA1r7AJVZkoeVliUz7vpK1f7DM6lDnOWBtFaAc66xxe2SIoLcjdMlfrVJpJADRjLTEfLp6PNARua3FLJKDezN7WOekGOlSIXHHrzAFlyMY0uZflFykzc9E3zE%2FldijdHWJnIoBVNW1c7fl2ehrbbv%2BAQWpeWqMagkuGNWOmFD6SHPixWLVNgNMlVLXrVKtLEMp3jmXLR40vqdv3bpCkJTLqA9M1XpKsBJlX5szlJlqJzYleD8NncUA8sO2sqiRhnk%2BZURIHV0EQRdPdzJIWMuENZZr%2FPKRl6MNekpZHOtF6wcWQYd4oRYptUjwzWQupbovVnaAyehNLMJbJi6sARkiXAQMC1kUyHpMQVrEdC69%2FNPEW8Cy6QIffUW1d0VBzVuK2hNJV1IgsbqEJZ56HXTtQCz4rJRlATwum2%2BcDS1ITfjA1JWuXwkbFON73TDPFsuz4fOhpVdmNvgN%2B%2F9h4YhmlxlsP3Ud%2BIfuPgzm4b%2FymVzdK%2FBOag7SjO9YRbqH6%2BrIXeXUmPf332sRw4twDy6LhqYxQmzBcr%2BLF4O0%2FTWW1N1pbusZ2p5nyVwaQEQd1FFeVTz5UXNvIUqA89x%2FWzrNHRUEdbR4ZQh5%2B9Eefd0IzIYza6TgRnWYknClVK1sq0qZ7bM1xhJfCsH3xCpWpVNqRqUZvOcWl8JH8aTrs2PhkkDU2%2Flto%2BlcsKG95lV06xukVyfa%2B2uzH%2FVp1Pph2jGLvMHTfLFdgt8jymryMt84jWtg8g%2F9N%2B%2Fb%2B69Pf4OuqLKx0md6Z6gOo4erBMvjrxSwWZxPBf%2BX674CclYnPpBsQjprvRMYGGGUtO957breZv5yQ0zWEB86BWHN6%2Fp6GJ%2Fb3TpeCEgEIKWB6VXxIt9EV7Ls9DrSb43eYSfUDKiBqpKcSD59g5W98rxrm%2FJhrzUnGQsVS4GRNR%2FquTJeWOc4NFIeyULqyLxLECaeXSPoqKe1ijkZc2cz%2FIDLNnmKY%2BMte7JslLswmWC469aL5%2BGMlgC%2FRJ%2BDhxZVbgOfAy7WZ4CoPtpoM2ixT5l5%2Ffg%2F1Z9jlRM4SAdU6XuC%2FnIJjYRBjZtA2IHE4xl87bgR8noUW%2FpMUmWeJrrScXuNpOKKhGoeM1XBg%2BiCZbFQ6oIihzGdqsvW4YQ3i%2BdzJEQvO%2FabotjD6zgekjvonlWOXTiSFXRS9h1JhyPFjMUdooDCkB7%2BtvuMj%2BUXUX2TccPtt%2BHdZpwtRVwzzf96J7bcs%2F1FaYhDsoJO01SqEtUAFWVqLO004kauPB6uJc%2FDSlBDqGI2hY02ORAl6BfyHVT4vxW8YDv55kD0R2hJhBtfhHsvQaEvrOR2BFHIB9hp5G2KW6zDuCWthVckhjUDsBDzOzc%2FDYtcBHCw8oWVXAbX%2BEjJNwHH2CVXVFO7HRSg3LEjRmqX1Hu72wXCp%2FlV3PCa%2FZcytUhuwMl%2B4PaqzD%2BQcTM0bm8JXylJAuksYMqQNkb9D%2BukLxyzADwfYFWy3aEJI1bVu0S0s6SJlLhGL1Z1E8x3sVh6vrMwYV6lZXzAU3BjYBgozfNvWpUDbM7bRJmEgBIgJFZJImFKs%2FwltOI6XACd1E%2BHQXchinr%2FHFYX2JW7uawkF0eJ7uNcYQ9O0pw9UNPWTOdVP855V3JIJZA0HvKt99Sn2Q%2FHgTWBAFmjefEI73B0wEGqIjPCTPJfljbcouvH6DfzttfGItUJ5g2lAN2H6lr%2F2UuRpjaJa3X924BF6WlIr%2FZ0JoAwxWvw1dvd00BCBamThc%2BK515yzwo5uYFKBlyt%2BQz9y%2FAf2mfRlI%2Bg%2BBV7b3LipC%2B66gfY6HJwOxNniy67qD1pkgKMRT6xeP8h86IOHUDyaG54RIMQAkYDSOyhUlKbMEsVbhq%2Fuqo9wvVq9djLSB%2BUcjpes%2Bfsn%2FyDdTl3nCWHd3xDC6MywPSvb%2F7pvhriQmpPjiXHhrvaMpWdecsXEF60kB3Hl5gm6klilE4ZkbcwakkSdGUVYn0b2mbM%2B7gq2lopcmTzAJuPAZI%2Fdp%2BnfT9mMywge6d1RP%2BCFBWCZdSXUjHHGvuWBPg2u8yfF7lQGOq7avsR%2BXZ2pi2afwwgzEyoHoxPYSfXn3J5%2FSkAINRE8rjbxK2n2qCRXSUlex1fp38OrPHK9TODFHPuq0whQQ2JYgq2IHXeUUiysJ1j5cub8JfZkoOEAm2TwnExVx9Fvvq3SadMWKKW8yOwZ6u%2BSLJUKu%2FtSzD6cXtiCbDpoZTe9LAeAgD%2FH9CDsvgX6sm6m441qf2glcOg01GsiLi%2BcVOGy14oT0I%2F0qtAjZS5qQskhMFNhrPudHgXgIw8%2BC81KK396oDN5JccahOO2Zuxkgiv3BtWO%2Fp8RBzrkPLR3hK2hj%2FVcSdwe0VUvq7%2FBNKyoRUsTN0tLWk6uvsce8P5avqG0VXXnUYuhvQTRBd88QACFMQW47kINvBq0N%2Ba8byLHlN8Kq%2BogTeBDuTn7CKOlOxi1ryxYm%2BUtzP4Ep0XBfrYba9Ztyp9L4Il0aNXElYudeV7i1NGwjh5FRgvYOPLQwTs7kHCIIUgpcYcX4oUUwdvyyZUDnzGPuWUhu1E0RELWiV89%2BJIiCrw4SKdohI86thnXhR9Ye%2FciOOjq8%2Foo0Vl9lq2Re2uJttZ9l99cCi54xFIPS1celZfZYKxR%2B2HTaB3EZ4z7%2FvdvQJ8BqXTWlfLTUh6M1wDJvZJPJkHBILh8sHMdew3NT2NSfF7dIzXIdg%2F8h5Pyy7NCQEXYn0nhlEecjuL3%2FOD4ccd4nq7FvoA9RcSLkpVg4OUy7KsQgfxwdp3KLrgJFowsqb5oN6zBojmWpFXhqaSSQFM3jsDQ6eCtxruTKTFqXc0eb23enSXNJoEIk%2BMQnwbycOYZomJ05Bi0dQrCEwMQ6jG%2Fq6pH2qfNiA5hoVHZww5miQHEHCT4vw0mTRky9d%2FuUNgjpZlK28iKV%2BT7i%2Ftq6UJ8ldEi%2FeFIpJUNi2tjQtQk2qrBw3L%2FN0Z7c%2BdkzqXxAByQCXuCA5v1Zt4yJKoC0763V6rrKU9JaIyeNAl4arqk%2BZ%2BQxfY6Ia6MmCpaGrzn4yHRnxnR52TEbn%2FhWM3LTzNeghmRphtKi4AereUSOJXbQOrdtVEG0uVF6ZNhX7DWYQ7BVI%2Bw5bN4Cp%2FBL9WxjD0s0WetzoRor0vL7IUHIzkoQkJHlBnCXXHh6Mif6Rzgm8O%2FfEgalGqhScqAwlXE5JYeZpm%2BusCO4gC0PE%2BSJzWQy63gHq5q3semEMn1cje95%2FIO5No09ZPoYkqAVd7XSBsVrYu%2BQhoGR8h95PcKeW7q2SVRanFCzC%2FhNALnQBh9qs78L23MiioERyE8D%2BnLi0K6l2Gba1BJ5tkbTaFynhuRWyq%2Bacvjbno5gPXVINSPoVf%2BbpZYSmgbZCAIrctXgInQuNBaWTzWICeJxKctTmaEIO6kXBB7y1p%2BzDpqVr4hjMkjZTS9mz8YLuU4eSAMhYD59GJZQi6mVkR1U8C9OsV6O%2BXOvnDQVWjrqQGIpVmfRv0B6sCtrBd%2BAX6N4TkaRfVehaW39%2BgnBB6SpTc0IZZ4apy%2BHXiOqVfLuABrL6JN6gH29V%2BRsd%2BybvouJRxdb47mxv7trl6JOwINUbERqsLQAPjrr54wBtS4LlRkvfBZpDAM7yCK%2FRpeT%2BjuC1X9i1p3CwL74V%2FN5Q5LxlA51Z9oxciOohCy4GkawbMSE8qor5%2BPwM4bNn%2FM%2FhgxmaOYRsoQZ4ZaEcRpAI5Vi4A3sIyYIdCbUvMmAKrEW%2FUeRhShapsCjLxcXeNuumWDCOHpJfVt3n8K0q6Ona%2FU4VkupnBbdK6Yo2%2FdBt64Zhmuzl3Pp9tnCmbYeuq%2BmR4B7PkCVNibRS0%2Fe8JI2S2mtSKb8XLVk%2BhmOXBxJ7sscsa%2FMjtWICOMVjg7fGYcwEXSUeJbVKMoCY1Jv7B6k4KV2sO9yruESkscm%2By3bV1rOFQgoQ2BFCS%2F1XwvFCWBoa4hoMgs1yVihXN7mRz61taqiPLqVoHNTSA4wOQtgS1xsYThYlZDpKyltNnFrs%2BB42yjByPn8qyR91eoobFYzjBvxnVrDg4DX58kJ2VumhFRe4NPg29seqk64Ps%2BbLUFDiCV39CVrsriWGR4G91xCeZpcv5NABou3M3RareJeoTTAmpBD3KUA3orZ8xRAUuFOkC9nDPJujH9nI117UMgScL9t9Rx7eB6l6jEt7KiMocEoRGHOMnSQJz28bbidFQWx0z0H67%2FcwOwSq0P71fDojxRc8Uhyk9yZKFfCiQ5HN6WnBS0u4O61hYDHO4oioPrFh4VvxdeYXf5Wz%2BDQFtdqUzYhC%2FlA%2FLWAWJF8WkQ%2BX7NEKUh3JO%2BxxFZJaJH28xgd4E5jnTT92orjalpTwTZ1y2Pm%2FsVUKyLm8oXhD9N2nTi%2FB2oey0H6Dn1Charhyc1MiS9dYLICym1zFBcTAQt6Our9D96Z20LRDi5UYci%2FxUDVJrwsBgREMxT4tXx41XsCJhkAxYvL1coY7HHmlgQUg6RDruY21h85VBJQeyNX0GkNUqXTaW5lTPRPflsIIbs80L0UX%2FZc6coyvlnWmkl3e93liSifT4eWW7AhhCAdXXZRKX2ZTzHKWnHzuXHoeP6MSHmSw6lA4Shi3VHv8TAmK4aumANtqASpxPw0I0rXy1U6dXW2UMj8FHEJP8pZ6BX5smKqMQaB6JuWP1pZCPgINg%3D%3D&__VIEWSTATEGENERATOR=3D1CCC47&__EVENTVALIDATION=qv5aJzTc3fM%2BcENN%2BTP2DgRs4ocXUM4qLJNP%2FtEv4q0xMardTbzlDm9uqRxoi%2BfRFn8e%2FC0PuVHiCvBR2xRuCXu%2BBQLORcJ%2BQ%2FANICydWIh6GamZbMbX0BfCN%2BuVKQqW8v1HzL9oN9IOmupGv9F%2BvyxGsToAR94w6szmvNNYvcmQKqcflo2K04UZh1lqzC7ScOHIhyMJb4xooM4oTg3qlmISKwYKDPhVgVgzU4zvzFueU2kToA0DykBBodt8%2BJcKHXbxt4UkL%2FBAZvHssrUeFA9OtAECcG4T3r68EB632IBprg8m9uiVX1wP%2BB8yQQdpQjBtYfT9rBHblz1HvaAu1mcRB0E%3D&ctl00%24cphRoblox%24GroupSearchBar%24SearchKeyword=Search+all+groups&ctl00%24cphRoblox%24rbxGroupRoleSetMembersPane%24dlRolesetList=2343447&ctl00%24cphRoblox%24rbxGroupRoleSetMembersPane%24RolesetCountHidden=2&ctl00%24cphRoblox%24rbxGroupRoleSetMembersPane%24currentRoleSetID=2343447&ctl00%24cphRoblox%24GroupWallPane%24GroupWallPager%24ctl01%24PageTextBox=1

编辑3:

s = requests.session()
login_data = dict(username='USERNAMEHERE', password='PASSWORDHERE')
s.post('https://www.roblox.com/newlogin', data=login_data)

page = s.get('http://www.roblox.com/Groups/Group.aspx?gid=403577')
soup=BeautifulSoup(page.content, "html.parser")
VIEWSTATE=soup.find(id="__VIEWSTATE")['value']
VIEWSTATEGENERATOR=soup.find(id="__VIEWSTATEGENERATOR")['value']
EVENTVALIDATION=soup.find(id="__EVENTVALIDATION")['value']

Join_Group = dict(__EVENTTARGET="JoinGroupDiv", __EVENTARGUMENT="Click", __LASTFOCUS="", __VIEWSTATE=VIEWSTATE, __VIEWSTATEGENERATOR=VIEWSTATEGENERATOR, __EVENTVALIDATION=EVENTVALIDATION)
join = s.post('http://www.roblox.com/Groups/Group.aspx?gid=403577', data=Join_Group)
print join
javascript python python-requests dopostback roblox
1个回答
2
投票

您的错误是因为这是无效的

dict
构造。您需要一个文字(如
{'foo': 'bar'}
),或者,如果使用构造函数,则需要关键字参数
dict(foo='bar')

您应该执行 POST,因为这就是

__doPostBack()
的作用 - 回发到已提供服务的同一页面/URL,请参阅什么是回发?.

要确定 POST 实际需要设置什么,您应该了解

__doPostBack()
函数。 这些参数用于填充名为
__EVENTTARGET
__EVENTARGUMENT
的隐藏表单字段。

您可以在这里阅读相关解释:

http://www.codeproject.com/Articles/667531/doPostBack-function

编辑: 还值得注意的是,当以这种方式与应用程序交互时,您还需要了解正在管理并传递到服务器的任何其他状态。有 cookie、视图状态等需要考虑。最好在浏览器中完成该过程,并使用开发人员工具检查/记录请求,以帮助您确定需要哪些数据。

编辑2:我看到Roblox有一个API。如果/在可能的情况下,您最好使用此功能,而不是与他们的 UI 交互。

参见 http://wiki.roblox.com/index.php/Web_APIs#Group_APIs

如果这不允许您访问组列表(我一眼看不到此处的搜索),那么您可能会考虑采用混合方法。

编辑 3: 对于抓取类型的方法,您可能需要考虑使用 Beautiful Soup 来解析页面/表单并提取 ASP.NET 添加的值 -

http://www.crummy.com/software/BeautifulSoup/

© www.soinside.com 2019 - 2024. All rights reserved.