首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mechanicalsoup设置表单元素的值,但不带名称

使用mechanicalsoup设置表单元素的值,但不带名称
EN

Stack Overflow用户
提问于 2018-10-01 14:40:30
回答 2查看 2.1K关注 0票数 6

我已经搜索了所有的mechanicalsoup beautifulsoup文档,但是我不知道如何使用'id‘来设置一个表单元素的值(因为它没有名字)。

代码语言:javascript
复制
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")

这让我明白了-

代码语言:javascript
复制
<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选择器和其他组合来引用元素,但得到了相同的错误。我可以通过以下命令获得实际的标记(我发现这是解决提交按钮类似问题的一种解决方案):

代码语言:javascript
复制
userid = browser.get_current_page().find('input', id='text-userid')

但是form.set()并不直接接受标签。

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-10-02 10:51:25

经过更多的研究,我了解到我应该在这种情况下使用Selenium (而不是机械汤)。我使用了这个指南,它在第一次尝试时就做了我需要的事情。

http://stanford.edu/~mgorkove/cgi-bin/rpython_tutorials/Scraping_a_Webpage_Rendered_by_Javascript_Using_Python.php

票数 3
EN

Stack Overflow用户

发布于 2019-01-02 17:41:25

如果没有name属性,由于表单数据将根据此name属性进行计算,因此在提交表单时,输入将变得毫无用处。这些输入很可能会被JavaScript使用,而不是被表单提交使用,而且MechanicalSoup不会帮助你处理JavaScript。请参见:

https://mechanicalsoup.readthedocs.io/en/stable/faq.html#form-submission-has-no-effect-or-fails

简而言之:您可能希望使用Selenium

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52585753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档