首先,我的英语不是我的母语。在
我尝试使用docs中描述的MechanicalSoup访问和操作表单。我使用chrome内置的“调试模式”(F12)使用给定的登录表单成功登录到页面。在
form action="https://www.thegoodwillout.de/customer/account/loginPost/"
可以使用chrome“调试器”找到表单here
这工作正常,不会产生任何错误。我试着升级我的游戏,转到一个更复杂的形式,这个形式在this网站上给出。我设法找到了这个片段
^{pr2}$这将导致
ValueError: No Closing quotation
这很奇怪,因为它没有使用任何特殊字符,我仔细检查了一遍,以便每个报价单都正确结束
我试着寻找一个更具体的表格,将适用于给定的鞋码,但这个表格似乎管理网站上的所有内容。我在网上搜索,发现有几篇文章指向python中的一个bug,我不敢相信这是真的!在
import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.thegoodwillout.de/nike-air-vortex-schwarz-weiss-anthrazit-903896-010")
browser.select_form('form[action="https://www.thegoodwillout.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cudGhlZ29vZHdpbGxvdXQuZGUvbmlrZS1haXItdm9ydGV4LXNjaHdhcnotd2Vpc3MtYW50aHJheml0LTkwMzg5Ni0wMTA_X19fU0lEPVU,/product/115178/form_key/r19gQi8K03l21bYk/"]')
NOTE: it all seems to track down to a module called shlex which is causing the error
最后是error log
如果你能为我指出正确的方向并链接一些我还没有完全调查过的网站,那将是非常有帮助的。在
这实际上是MechanicalSoup用来在HTML文档中导航的库BeautifulSoup4的一个问题,与在CSS选择器中使用逗号(
,
)有关。在BeautifulSoup在逗号上拆分CSS选择器,因此将查询视为:},分别解析。当分析第一个时,它发现一个开的
browser.select_form('form[action="https://www.thegoodwillout.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cudGhlZ29vZHdpbGxvdXQuZGUvbmlrZS1haXItdm9ydGV4LXNjaHdhcnotd2Vpc3MtYW50aHJheml0LTkwMzg5Ni0wMTA_X19fU0lEPVU
和{"
,但没有结束的"
,并出现错误。在它在某种程度上是一个特性(您可以指定多个CSS选择器作为
select
)的参数,但在这里它作为一个特性是没有用的(当您期望一个对象时提供几个选择器是没有意义的)。在解决方案:不要在CSS选择器中使用逗号。你可能有其他的标准来匹配你的表格。在
您可以尝试使用
%2C
而不是逗号(未测试)。在相关问题 更多 >
编程相关推荐