-1

MechanicalSoup 的教程向您展示了如何使用命名输入框进行操作,但并不是每个编写 html 的人都关心命名。我有一个带有单个表单的 html 页面,其中包含一个未命名的复选框(当您检查它时,会检查所有其他复选框)以及大量其他复选框,所有这些复选框都命名为“alpkey”。谁能帮我选择第一个复选框,或者找到并选择页面中的所有复选框?我需要这样做,然后点击“更多信息”按钮中的链接。html代码是这样的:

<p></p>
<form name="summform" target="_blank" action="/cgi-bin/RBG" method="post">
<input type="hidden" name="form" value="PNG/png2">
<center>

<table width="850" frame="below">
<tr><td><div>39 matches found</div>
</td></tr>
<tr><td><i>Select the records you wish to see more information on</i> <b>:</b>
<br>
</td></tr>
<tr><td><input type="checkbox" onclick="if(this.checked){checkAll(true)}else{checkAll(false)}">

<b>Select ALL/None</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="More Info">&nbsp;&nbsp;&nbsp;
Click on thumbnail to see larger image.
</td></tr>
</table>
<table width="850" frame="below">
<tr>
<td></td>
<td width="50" align="center"><b>LAE No.</b></td>
<td align="center"><b>Summary of record</b></td>
<td align="center"><b>Specimen Images</b></td>
<tr>
<td><input type="checkbox" name="alpkey" value="83237" /></td>
<td width="50" align="center"></td>
<td align="left">
<b><font color="#FFCC33">

....等等。还是我需要硒?

更新:代码下面的代码有效(或似乎 - browser.launch_browser() 除非我使用 StatefulBrowser,否则我无法直观地检查结果)......但我无法进一步了解。我不知道如何点击“提交”按钮链接。

browser = mechanicalsoup.Browser()
page = browser.get(myurl)
soup = page.soup
form = soup.select("form")[0]
for i in range(3, len(form.select("input"))):
    form.select("input")[i].checked = 'checked'
    # print(form.select("input")[i].checked)
submit = soup.findAll(type='submit')
#form2 = soup.select_form()
#form2.choose_submit('More Info')
#page2 = browser.submit(form, page.url)

....或者,当我使用 browser =mechanicalsoup.StatefulBrowser() 时,我似乎无法遍历复选框。

4

1 回答 1

0

这有效 - 循环通过大量复选框,所有复选框都具有相同的名称但不同的“已检查”属性(在 html 中表示为例如 value="83237"),检查它们(通过设置适当的值)并最后提交形式:

browser = mechanicalsoup.StatefulBrowser()
browser.open(myurl) # having set URL variable
browser.select_form('form[name="summform"]') # only one form on page, this was its name
check = browser.page.find_all('input')
rangeval = len(check)-2 # to loop through checkboxes, ignoring a couple of other input tags
names = []
for i in range(3, rangeval):
    names.append(check[i]['value']) # get list of values to set
browser["alpkey"] = names # all checkboxes have the same name so use list
browser.launch_browser() # verify that they're all checked
response = browser.submit_selected() # and submit form
print(response.url)
print(response.text)

...如果只选中“检查所有”框会更好,但它没有命名并且没有“值”属性。

于 2021-04-08T19:38:04.910 回答