0

首先,我的英语不是我的母语。

问题

我尝试使用 MechanicalSoup 访问和操作表单,如文档中所述。我确实使用给定的登录表单成功登录到该页面,该登录表单是使用 chrome 内置的“调试模式”(F12)找到的。

form action="https://www.thegoodwillout.de/customer/account/loginPost/"

可以使用 chrome“调试器”在此处找到表单

这工作正常,不会产生任何错误。我试图提高我的游戏水平并转向网站上提供的更复杂的表格。我设法将表格追踪到这个片段

form action="https://www.thegoodwillout.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cudGhlZ29vZHdpbGxvdXQuZGUvbmlrZS1haXItdm9ydGV4LXNjaHdhcnotd2Vpc3MtYW50aHJheml0LTkwMzg5Ni0wMTA_X19fU0lEPVU,/product/115178/form_key/r19gQi8K03l21bYk/"

这将导致一个

ValueError: No Closing quotation

这很奇怪,因为它不使用任何特殊字符,我仔细检查了每个引号都正确关闭

我试过什么

我试图找到一个更具体的表格,它适用于给定的鞋码,但这个表格似乎管理了网站上的所有内容。我在网上搜索了几篇文章,指出了 python 中的一个错误,我不敢相信这是真的!

带有附加错误日志的源代码

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/"]')

注意:这一切似乎都追溯到导致错误的名为 shlex 的模块

最后是错误日志

如果您能指出我正确的方向并链接一些我可能尚未完全调查的网站,那将非常有帮助。

4

1 回答 1

0

,这实际上是 BeautifulSoup4 的问题,MechanicalSoup 使用该库在 HTML 文档中导航,这与您在 CSS 选择器中使用逗号 ( ) 的事实有关。

BeautifulSoup 以逗号分隔 CSS 选择器,因此将您的查询视为:browser.select_form('form[action="https://www.thegoodwillout.de/checkout/cart/add/uenc/aHR0cHM6Ly93d3cudGhlZ29vZHdpbGxvdXQuZGUvbmlrZS1haXItdm9ydGV4LXNjaHdhcnotd2Vpc3MtYW50aHJheml0LTkwMzg5Ni0wMTA_X19fU0lEPVU/product/115178/form_key/r19gQi8K03l21bYk/"],分别解析。解析第一个时,它找到了一个开头"但没有关闭",并且出错了。

它在某种程度上是一个特性(您可以指定多个 CSS 选择器作为 的参数select),但在这里作为一个特性它是无用的(当您期望单个对象时提供多个选择器是没有意义的)。

解决方案:不要在 CSS 选择器中使用逗号。您可能有其他标准来匹配您的表格。

您可以尝试使用%2C而不是逗号(未经测试)。

于 2018-03-21T15:31:22.383 回答