gpt4 book ai didi

javascript - python-requests模块,post 2个 "values"更新&抓取网站

转载 作者:可可西里 更新时间:2023-11-01 16:36:02 27 4
gpt4 key购买 nike

第一部分已经回答,但是 EDIT 还没有。

我正在使用 python 和请求模块来抓取网站。因此,我必须“单击”一个更新按钮,它是一个包含在图像“pat_renewmark.gif”中的链接 (href)。

html

<form name="checkout_form" method="POST" id="checkout_form">
<input type="HIDDEN" id="checkoutpagecmd">
<a href="#" onclick="return submitCheckout( 'sortByCheckoutDate', 'bycheckoutdate' )">
<img src="/screens/pat_sortbychkout.gif" alt="SORT BY DATE CHECKED OUT" border="0">
</a>
<input type="HIDDEN" name="currentsortorder" value="current_duedate">
<a href="#" onclick="return submitCheckout( 'requestRenewSome', 'requestRenewSome' )">
<img src="/screens/pat_renewmark.gif" alt="RENEW SELECTED ITEMS" border="0">
</a>
</form>

javascript (提交结帐)

function submitCheckout(buttonname, buttonvalue)
{
var oHiddenID;
oHiddenID = document.getElementById("checkoutpagecmd");

oHiddenID.name = buttonname;
oHiddenID.value = buttonvalue;

//c29364j/c1365070 - prevent the patron from submitting twice
var oButtonSpan;
oButtonSpan = document.getElementById("checkoutbuttons0");
if (oButtonSpan) oButtonSpan.style.display = "none";
oButtonSpan = document.getElementById("checkoutbuttons1");
if (oButtonSpan) oButtonSpan.style.display = "none";

document.getElementById("checkout_form").submit();
return true;
}

显然 submitCheckout.namevalue 都分配给 ”requestRenewSome”' 传递给隐藏输入id=“checkoutpagecmd”`。


我之前使用过请求模块,我能够处理简单的用户名和密码输入,例如:

html

<div class="formEntryArea">
<label for="extpatid">
<span class="formLabel">
Your username:
</span>
</label>
<input name="extpatid" id="extpatid" value="" size="20" maxlength="40">
<label for="extpatpw">
<span class="formLabel">
Your password:
</span>
</label>
<input name="extpatpw" id="extpatpw" type="PASSWORD" value="" size="20" maxlength="40">
</div>

python

import requests

with requests.Session() as c:

LOGIN_URL = "https://example.com"
USERNAME = “XXXXX”
PASSWORD = “YYYYY”

source = c.get(LOGIN_URL)

data_load = dict(extpatid=USERNAME,extpatpw=PASSWORD)
head_load = dict(referer=LOGIN_URL)

c.post(LOGIN_URL, data=data_load, headers=head_load)

但是,这里的 c.post 只处理每个输入(用户名或密码)的一个“值”,并且不包含任何 javascript 代码。
看起来,对于上面的问题,我必须以某种方式发布两个属性/字符串
.name = 'requestRenewSome'
.value = 'requestRenewSome'?还是方法与我附加的示例完全不同?


编辑

matino 的回答(或 t.m.adam 的评论)解决了问题!不幸的是,用户随后必须通过单击"is"按钮来确认他确定要续订。

html

<form name="checkout_form" method="POST" id="checkout_form">
<input type="HIDDEN" id="checkoutpagecmd">
<input type="HIDDEN" name="currentsortorder" value="current_duedate">
<span id="checkoutbuttons0">
<input type="SUBMIT" name="renewsome" value="YES">
<input type="SUBMIT" name="donothing" value="NO">
</span>
</form>

因此,我将 'renewsome': 'YES' 添加到 data_load 字典中,但这还不够。我不知道隐藏输入的值(value)? id=checkoutpagecmd 和/或? name=currentsortorder 但找不到关于如何继续的任何答案。

附言我知道这实际上是一个已知问题,如果有人回答,我将把它分开。

最佳答案

javascript 代码实际做的是为隐藏输入动态分配名称和值。所以最后可以有2种情况:

<input type="hidden" id="checkoutpagecmd" name="sortByCheckoutDate" value= "bycheckoutdate">

<input type="hidden" id="checkoutpagecmd" name="requestRenewSome" value= "requestRenewSome">

知道了,你可以像这样发送http请求:

requests.post(url, data={'sortByCheckoutDate': 'bycheckoutdate'})  # 1st case
requests.post(url, data={'requestRenewSome': 'requestRenewSome'}) # 2nd case

关于javascript - python-requests模块,post 2个 "values"更新&抓取网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48803223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com