我已经搜索了所有Mechanicalsoup和beautifulsoup文档,但无法弄清楚如何使用'id'设置表单元素的值(因为它没有名称)。
import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open(my_url)
form = browser.select_form('form[id="login-form"]')
browser.get_current_form().print_summary()
userid = browser.get_current_page().find('input', id='text-userid')
form.set("text-userid", "user")
这让我-
<input class="login-text-box" id="text-userid" placeholder="Email" type="text" value=""/>
<input class="login-text-box" id="text-password" placeholder="Password" type="password" value=""/>
<input id="button-login" type="submit" value="Sign In"/>
<input id="remember-me-checkbox" name="rememberme" type="checkbox" value="rememberme"/>
LinkNotFoundError: No valid element named text-userid
我尝试通过id,CSS选择器和其他组合引用元素,但得到相同的错误。我可以通过以下方式获取实际标签(我发现它是解决与提交按钮类似问题的解决方案):
userid = browser.get_current_page().find('input', id='text-userid')
但是form.set()不直接接受标签。
感谢您的帮助!
答案 0 :(得分:1)
经过更多研究,我了解到在这种情况下我应该使用硒(而不是机械汤)。我使用了本指南,该指南完全满足了我的第一次尝试。
答案 1 :(得分:-1)
如果没有name
属性,则提交表单时输入将毫无用处,因为将基于此name
属性来计算表单数据。此输入很可能将由JavaScript使用,而不是由表单提交使用,MechanicalSoup将无法帮助您使用JavaScript。参见:
https://mechanicalsoup.readthedocs.io/en/stable/faq.html#form-submission-has-no-effect-or-fails
简而言之:您可能想改用Selenium。