GVKun编程网logo

Python-请求/ RoboBrowser-ASPX POST JavaScript(python请求http)

22

本文将介绍Python-请求/RoboBrowser-ASPXPOSTJavaScript的详细情况,特别是关于python请求http的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面

本文将介绍Python-请求/ RoboBrowser-ASPX POST JavaScript的详细情况,特别是关于python请求http的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于

Sorry, JavaScript must be enabled.
Change your browser options, then try again什么意思、Adobe acrobat javascript 获取 IP 地址、asp.net – 使用Python Mechanize进行屏幕分析aspx – Javascript表单提交、Bron-Kerbosch JavaScript 实现
的知识。

本文目录一览:

Python-请求/ RoboBrowser-ASPX POST JavaScript(python请求http)

Python-请求/ RoboBrowser-ASPX POST JavaScript(python请求http)

我正在移植一个使用curl的bash脚本,并将代码中的有效载荷POST到URL并正常工作。基本的问题是,使用robobrowser,我在使用页面表单发布时遇到了麻烦。

逐步浏览网站:

  • 登录到/SubLogin.aspx
  • 成功的登录重定向/OptionsSummary.aspx
  • 使用参数获取/FindMe.aspx
  • POST /FindMe.aspx按钮“电话列表”(然后页面应在“电话列表”表中加载项“工作”)
  • 选择“工作”项会执行到/PhoneLists.aspx的POST(然后应加载带有用户列表的表“工作”。

我已经能够成功通过网站身份验证并使用RoboBrowser和Requests + bs4执行GET,但是我对回发页面本身感到困惑。

使用RoboBrowser(liboncall.py)

#!/usr/bin/pythonfrom robobrowser import RoboBrowserfrom bs4 import BeautifulSoup as BSoc_mailbox = ''123456''oc_password_hashed = ''ABCDEFG''base_uri = ''http://example.com''auth_uri = oc_base_uri + ''/SubLogin.aspx''find_uri = oc_base_uri + ''/FindMe.aspx''phne_uri = oc_base_uri + ''/PhoneLists.aspx''p_auth_payload = {        ''SubLoginControl:javascriptTest'': ''true'',        ''SubLoginControl:mailbox'': mailbox,        ''SubLoginControl:phoneNumber'': '''',        ''SubLoginControl:password'': password_hashed,        ''SubLoginControl:btnLogOn'': ''Logon'',        ''SubLoginControl:webLanguage'': ''en-US'',        ''SubLoginControl:initialLanguage'': ''en-US'',        ''SubLoginControl:errorCallBackNumber'': ''Entered telephone number contains non-dialable characters.'',        ''SubLoginControl:cookieMailbox'': ''mailbox'',        ''SubLoginControl:cookieCallbackNumber'': ''callbackNumber'',        ''SubLoginControl:serverDomain'': ''''        }p_find_payload = {        ''FindMeControl:enableFindMe'': ''on'',        ''FindMeControl:MasterDataControl:focusElement'': '''',        ''FindMeControl:MasterDataControl:masterList:_ctl0:enabled'': ''on'',        ''FindMeControl:MasterDataControl:masterList:_ctl0:itemGuid'': '''',        ''FindMeControl:MasterDataControl:hidSelectedScheduleName'': '''',        ''FindMeControl:MasterDataControl:hidbtnStatus'': '''',        ''FindMeControl:MasterDataControl:hidScheduleXML'': '''',        ''FindMeControl:MasterDataControl:tempScheduleXML'': '''',        ''FindMeControl:MasterDataControl:hidSelectedScheduleGUID'': '''',        ''FindMeControl:MasterDataControl:hidChangedScheduleList'': '''',        ''FindMeControl:btnPhoneLists'': ''Phone Lists'',        ''FindMeControl:enableFindMeHidden'': '''',        ''FindMeControl:applySet'': ''false''        }p_phne_payload = {        ''__EVENTARGUMENT'': '''',        ''__EVENTTARGET'': ''PhoneListsControl$MasterDataControl$masterList$_ctl0$SelectButton'',        ''PhoneListsControl:MasterDataControl:focusElement'': '''',        ''PhoneListsControl:MasterDataControl:masterList:_ctl0:itemGuid'': '''',        ''PhoneListsControl:MasterDataControl:hidSelectedScheduleName'': '''',        ''PhoneListsControl:MasterDataControl:hidbtnStatus'': '''',        ''PhoneListsControl:MasterDataControl:hidScheduleXML'': '''',        ''PhoneListsControl:MasterDataControl:tempScheduleXML'': '''',        ''PhoneListsControl:MasterDataControl:hidSelectedScheduleGUID'': '''',        ''PhoneListsControl:MasterDataControl:hidChangedScheduleList'': '''',        ''PhoneListsControl:applySet'': ''false''        }def auth(mailbox, password):    browser = RoboBrowser(history=False)    browser.open(oc_auth_uri)    signin = browser.get_form(id=''aspnetForm'')    signin[''SubLoginControl:mailbox''].value = mailbox    signin[''SubLoginControl:password''].value = password    signin[''SubLoginControl:javascriptTest''].value = ''true''    signin[''SubLoginControl:btnLogOn''].value = ''Logon''    signin[''SubLoginControl:webLanguage''].value = ''en-US''    signin[''SubLoginControl:initialLanguage''].value = ''en-US''    signin[''SubLoginControl:errorCallBackNumber''].value = ''Entered+telephone+number+contains+non-dialable+characters.''    signin[''SubLoginControl:cookieMailbox''].value = ''mailbox''    signin[''SubLoginControl:cookieCallbackNumber''].value = ''callbackNumber''    signin[''SubLoginControl:serverDomain''].value = ''''    browser.submit_form(signin)    return browser

登录到站点并显示URL以确认我们位于:

In [20]: from liboncall import *In [21]: m = auth(oc_mailbox, oc_password_hashed)In [22]: m.urlOut[22]: u''http://example.com/OptionsSummary.aspx''

打开“ /FindMe.aspx”:

In [24]: m.open(find_uri)In [25]: m.urlOut[25]: u''http://example.com/FindMe.aspx''

最初,“ / FindMe.aspx”将加载一个表单和一个“电话列表”(FindMeControl:btnPhoneLists)按钮。

In [26]: m.select(''title'')Out[26]: [<title>Find Me</title>]In [27]: form_find_a = m.get_form(action="FindMe.aspx")In [28]: for i in form_find_a.keys():    print(i)    ....:    __VIEWSTATE    __EVENTVALIDATION    FindMeControl:enableFindMe    FindMeControl:MasterDataControl:focusElement    FindMeControl:MasterDataControl:masterList:_ctl0:enabled    FindMeControl:MasterDataControl:masterList:_ctl0:itemGuid    FindMeControl:MasterDataControl:btnAdd    FindMeControl:MasterDataControl:btnDelete    FindMeControl:MasterDataControl:btnRename    FindMeControl:MasterDataControl:btnCancel    FindMeControl:MasterDataControl:btnEnter    FindMeControl:MasterDataControl:btnUpdate    FindMeControl:MasterDataControl:hidSelectedScheduleName    FindMeControl:MasterDataControl:hidbtnStatus    FindMeControl:MasterDataControl:hidScheduleXML    FindMeControl:MasterDataControl:tempScheduleXML    FindMeControl:MasterDataControl:hidSelectedScheduleGUID    FindMeControl:MasterDataControl:hidChangedScheduleList    FindMeControl:btnApply    FindMeControl:btnSchedules    FindMeControl:btnPhoneLists    FindMeControl:enableFindMeHidden    FindMeControl:applySet

删除不需要的表单字段,填写表单并提交:

In [29]: find_remove = (''FindMeControl:MasterDataControl:btnAdd'',''FindMeControl:MasterDataControl:btnDelete'',''FindMeControl:MasterDataControl:btnRename'',''FindMeControl:MasterDataControl:btnCancel'',''FindMeControl:MasterDataControl:btnEnter'',''FindMeControl:MasterDataControl:btnUpdate'',''FindMeControl:btnApply'',''FindMeControl:btnSchedules'')In [30]: for i in find_remove:        form_find_a.fields.pop(i)In [31]: form_find_a[''FindMeControl:enableFindMe''].value = ''on''form_find_a[''FindMeControl:MasterDataControl:focusElement''].value = ''''form_find_a[''FindMeControl:MasterDataControl:masterList:_ctl0:enabled''].value = ''on''form_find_a[''FindMeControl:MasterDataControl:masterList:_ctl0:itemGuid''].value = ''''form_find_a[''FindMeControl:MasterDataControl:hidSelectedScheduleName''].value = ''''form_find_a[''FindMeControl:MasterDataControl:hidbtnStatus''].value = ''''form_find_a[''FindMeControl:MasterDataControl:hidScheduleXML''].value = ''''form_find_a[''FindMeControl:MasterDataControl:tempScheduleXML''].value = ''''form_find_a[''FindMeControl:MasterDataControl:hidSelectedScheduleGUID''].value = ''''form_find_a[''FindMeControl:MasterDataControl:hidChangedScheduleList''].value = ''''form_find_a[''FindMeControl:btnPhoneLists''].value = ''Phone Lists''form_find_a[''FindMeControl:enableFindMeHidden''].value = ''''form_find_a[''FindMeControl:applySet''].value = ''false''Out [31]: ...In [32]: m.submit_form(form_find_a)

验证该页面已更新并且具有列表项目“工作”:

In [33]: m.parsed.find(''title'')Out[33]: <title>Phone Lists</title>In [34]: m.parsed.find(''a'', id=''PhoneListsControl_MasterDataControl_masterList__ctl0_SelectButton'')Out[34]: <ahref="javascript:__doPostBack(''PhoneListsControl$MasterDataControl$masterList$_ctl0$SelectButton'','''')" id="PhoneListsControl_MasterDataControl_masterList__ctl0_SelectButton" onclick="javascript:onClick();">Work</a>

获取“ PhoneLists.aspx”表单,删除不需要的字段,填写并提交。

In [35]: form_find_b = m.get_form(action=''PhoneLists.aspx'')In [36]: phne_remove = (    ''PhoneListsControl:MasterDataControl:btnAdd'',    ''PhoneListsControl:MasterDataControl:btnDelete'',    ''PhoneListsControl:MasterDataControl:btnRename'',    ''PhoneListsControl:MasterDataControl:btnCancel'',    ''PhoneListsControl:MasterDataControl:btnEnter'',    ''PhoneListsControl:MasterDataControl:btnUpdate'',    ''PhoneListsControl:btnApply'',    ''PhoneListsControl:btnBack'')In [37]: for i in phne_remove:            form_find_b.fields.pop(i)In [38]: form_find_b[''PhoneListsControl:MasterDataControl:focusElement''].value = ''''             form_find_b[''PhoneListsControl:MasterDataControl:hidChangedScheduleList''].value = ''''form_find_b[''PhoneListsControl:MasterDataControl:hidScheduleXML''].value = ''''form_find_b[''PhoneListsControl:MasterDataControl:hidSelectedScheduleGUID''].value = ''''form_find_b[''PhoneListsControl:MasterDataControl:hidSelectedScheduleName''].value = ''''form_find_b[''PhoneListsControl:MasterDataControl:hidbtnStatus''].value = ''''form_find_b[''PhoneListsControl:MasterDataControl:masterList:_ctl0:itemGuid''].value = ''''form_find_b[''PhoneListsControl:MasterDataControl:tempScheduleXML''].value = ''''form_find_b[''PhoneListsControl:applySet''].value = ''false''In [39]: m.submit_form(form_find_b)

查看帖子以查看是否加载了用户列表。在这种情况下,它没有加载用户列表。

In [40]: m.parsed.findAll(''div'', id=''PhoneListsControl_phoneListMembersText'')Out[41]: [<divid="PhoneListsControl_phoneListMembersText"></div>]

如果 成功,则上述内容将返回:

<div id="PhoneListsControl_phoneListMembersText">&nbsp;&nbsp;Work&nbsp;&nbsp;</div>

连同表格中的以下项目(PhoneListsControl_phoneListDetail):

<input name="PhoneListsControl:phoneListDetail:_ctl2:number" type="text" value="95551234567" maxlength="50" id="PhoneListsControl_phoneListDetail__ctl2_number" onkeyup="enableApplyButton(''PhoneListsControl_'')">...<input name="PhoneListsControl:phoneListDetail:_ctl3:number" type="text" value="95551236789" maxlength="50" id="PhoneListsControl_phoneListDetail__ctl2_number" onkeyup="enableApplyButton(''PhoneListsControl_'')">...

在这家合资公司中,我发现Robobrowser并未包括“
PhoneLists.aspx”中的所有必需的formdata,以便按预期方式工作(''__EVENTTARGET'':''PhoneListsControl$MasterDataControl$masterList$_ctl0$SelectButton''__EVENTARGUMENT)。设置参数然后执行操作submit_form(form_find_b)也无法获得预期的结果。我想知道add_field()fromrobobrowser.forms.form是否会起作用,但是我不理解如何正确利用它(如果要按我的意愿使用它,例如,将__EVENTTARGET__EVENTARGUMENT隐藏的输入字段添加到表单中)。

我还缺少其他东西吗?RoboBrowser
/请求是否不支持此类帖子?难道形式需要JavaScript提到执行在这里与机械化?

答案1

小编典典

解决了

经过大量的搜寻之后,重新发布有关reddit的帮助,然后随机绊倒这个RoboBrowser问题,该问题向我展示了如何正确使用’fields.add_field()’方法;问题已经解决了。

例如

b_e_arg = robobrowser.forms.fields.Input(''\<input name="__EVENTARGUMENT" value="" \/\>'')b_e_target = robobrowser.forms.fields.Input(''\<input name="__EVENTTARGET" value="PhoneListsControl$MasterDataControl$masterList$_ctl0$SelectButton" \/\>'')In [30]: form_find_b.add_field(b_e_target)In [31]: form_find_b.add_field(b_e_arg)

用这些值更新表单后,提交给“ PhoneLists.aspx”的表单将按预期工作。

In [33]: m.submit_form(form_find_b)In [34]: m.urlOut[34]: u''http://example/PhoneLists.aspx''In [35]: m.parsed.findAll(''div'', id=''PhoneListsControl_phoneListMembersText'')Out[35]: [<divid="PhoneListsControl_phoneListMembersText">  Work  </div>]In [36]: m.parsed.findAll(''input'', id=''PhoneListsControl_phoneListDetail__ctl2_number'')Out[36]: [<input id="PhoneListsControl_phoneListDetail__ctl2_number" maxlength="50" name="PhoneListsControl:phoneListDetail:_ctl2:number" onkeyup="enableApplyButton(''PhoneListsControl_'')" type="text" value="95551234567"/>]

我希望其他必须抓取ASPX网站的人都能发现这一点。祝大家开心!

Sorry, JavaScript must be enabled.
Change your browser options, then try again什么意思" alt="

Sorry, JavaScript must be enabled.
Change your browser options, then
try again什么意思">

Sorry, JavaScript must be enabled.
Change your browser options, then
try again什么意思">

"noscript"><p>Sorry, JavaScript must be enabled.<br/>Change your browser options, then <a href="">try again</a>.</p></div>什么意思?

Adobe acrobat javascript 获取 IP 地址

Adobe acrobat javascript 获取 IP 地址

我在 Adob​​e Acrobat 文档中找到了大量示例。 例如。 Net.HTTP.request...

asp.net – 使用Python Mechanize进行屏幕分析aspx – Javascript表单提交

asp.net – 使用Python Mechanize进行屏幕分析aspx – Javascript表单提交

我正在尝试使用Mechanize / Python在scraperwiki( http://scraperwiki.com/scrapers/food_standards_agency/)上搜索英国食品评级机构数据aspx搜索结果页面(例如,g http://ratings.food.gov.uk/QuickSearch.aspx?q=po30),但在尝试关注具有该表单的“下一页”链接时遇到问题:
<input type="submit" name="ctl00$ContentPlaceHolder1$uxResults$uxNext" value="Next >" id="ctl00_ContentPlaceHolder1_uxResults_uxNext" title="Next >" />

表单处理程序如下所示:

<form method="post" action="QuickSearch.aspx?q=po30" onsubmit="javascript:return WebForm_OnSubmit();" onkeypress="javascript:return WebForm_FireDefaultButton(event,'ctl00_ContentPlaceHolder1_buttonSearch')" id="aspnetForm">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />

手动单击“下一步”链接时的HTTP跟踪显示__EVENTTARGET为空?我可以在其他刮刀上找到的所有婴儿床都显示出__EVENTTARGET的操纵作为处理下一页的方式.

实际上,我不确定我想要抓取的页面是如何加载下一页的?无论我在刮刀上扔什么,它都只能设法加载第一个结果页面. (即使能够改变每页的结果数量也很有用,但我也看不出怎么做!)

那么 – 关于如何刮取第N个结果页面的任何想法N> 0?

解决方法

Mechanize不处理javascript,但对于这种特殊情况,它不需要.

首先我们用mechanize打开结果页面

url = 'http://ratings.food.gov.uk/QuickSearch.aspx?q=po30'
br = mechanize.browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.open(url)
response = br.response().read()

然后我们选择aspnet表单:

br.select_form(nr=0) #Select the first (and only) form - it has no name so we reference by number

表单有5个提交按钮 – 我们想提交将我们带到下一个结果页面的按钮:

response = br.submit(name='ctl00$ContentPlaceHolder1$uxResults$uxNext').read()  #"Press" the next submit button

表单中的其他提交按钮是:

ctl00$uxLanguageSwitch # Switch language to Welsh
ctl00$ContentPlaceHolder1$uxResults$Button1 # Search submit button
ctl00$ContentPlaceHolder1$uxResults$uxFirst # First result page
ctl00$ContentPlaceHolder1$uxResults$uxPrevIoUs # PrevIoUs result page
ctl00$ContentPlaceHolder1$uxResults$uxLast # Last result page

在机械化中我们可以得到这样的表单信息:

for form in br.forms():
    print form

Bron-Kerbosch JavaScript 实现

Bron-Kerbosch JavaScript 实现

如何解决Bron-Kerbosch JavaScript 实现?

我正在尝试实现 BK 的标准(无枢轴,无排序)版本。我不是特别了解算法(我还没有找到很好的解释......)但我认为伪代码很简单,所以我试了一下。它不起作用。 cliques 数组(应该包含形成的最大 cliques)通常包含 4 个重复值的长数组。

因为我不明白它是如何直观地工作的,所以我在调试时很快就迷路了。 如果有人能给我一个很好的资源来解释这个算法,向我解释它,或者告诉我下面的代码有什么问题,我将不胜感激:

let cliques = [];

let adjList = [ 
[2,3],[4,5],[0,3,4,2,[2,1,1]
];



function bronKerbosch(P,R,X) {
  if (P.length === 0 && X.length === 0)
    // if P and X are empty
    cliques.push(R);

  for (let i = 0; i < P.length; i++) {
    let v = P[i];
    let PnN = []; // P intersection with neighbours of v
    let XnN = []; // X intersection with neighbours

    for (let j = 0; j < adjList[v].length; j++) {
      for (let k = 0; k < P.length; k++)
        if (P[k] === adjList[v][j]) PnN.push(P[k]); // finding intersection of P and N(v)

      for (let l = 0; l < X.length; L++)
        if (X[l] === adjList[v][j]) XnN.push(X[l]); // finding intersection of X and N(v)
    }

    
    R.push(v);
    bronKerbosch(PnN,XnN);


    for (let i = 0; i < P.length; i++) if (P[i] === v) P.splice(i,1);
    // P = P-v

    X.push(v); // X = X reunion v
  }
}

// 

function maxClique() {
let P = [0,5]; // graph w 6 nodes
let X = [];
let R = [];

bronKerbosch(P,X);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于Python-请求/ RoboBrowser-ASPX POST JavaScriptpython请求http的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于