RoboBrowser调用get_form返回None但select方法可正常定位表单
问题原因分析
你遇到的问题和JavaScript加载无关,是get_form方法的参数规则和select方法不兼容导致的:
browser.select继承自BeautifulSoup的DOM查询方法,支持标准CSS选择器语法,所以你写的类选择器、属性选择器都能正常匹配到表单元素。browser.get_form是RoboBrowser单独封装的工具方法,它的首个入参不支持CSS选择器,只会精准匹配表单的id属性或name属性的值。你传入的.dark-text是CSS类选择器格式,get_form会直接把它当成普通字符串,查找id/name为.dark-text的表单,你的目标表单没有对应属性,自然返回None。
解决方案
你已经可以用select方法定位到表单标签,直接把标签封装为RoboBrowser的Form对象即可正常操作,示例代码如下:
from robobrowser import RoboBrowser from robobrowser.forms.form import Form url = 'https://www.twino.eu/en/login/' browser = RoboBrowser(parser="html.parser") browser.open(url) # 先查询到表单DOM元素 form_tag = browser.select_one("form.dark-text.mt-6") # 封装为Form对象 login_form = Form(form_tag) # 后续表单操作和用get_form拿到的对象完全一致 login_form.fields[0].value = "你的登录邮箱" login_form.fields[1].value = "你的登录密码" browser.submit_form(login_form)
内容的提问来源于stack exchange,提问作者djangonaut
相关产品推荐
相关产品推荐

