我已经搜索了所有的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()并不直接接受标签。
谢谢你的帮助!
发布于 2018-10-02 10:51:25
经过更多的研究,我了解到我应该在这种情况下使用Selenium (而不是机械汤)。我使用了这个指南,它在第一次尝试时就做了我需要的事情。
http://stanford.edu/~mgorkove/cgi-bin/rpython_tutorials/Scraping_a_Webpage_Rendered_by_Javascript_Using_Python.php
发布于 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。
https://stackoverflow.com/questions/52585753
复制相似问题