为什么我的 python mechanize 脚本无法用于该特定站点

发布于 2024-12-07 12:25:05 字数 1542 浏览 1 评论 0原文

我需要模拟输入商品名称并点击 http://ccclub.cmbchina.com 上的搜索按钮的过程/ccclubnew/

如果我直接在 HTML 中检查,搜索表单将用名称“searchKey”进行描述,

<span class="searchinput">
     <input type="text" name="searchKey" id="searchKey" maxlength="25">
</span>

下面是脚本:

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Want debugging messages?
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)

br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

br.open("http://ccclub.cmbchina.com/ccclubnew/")

我得到的结果

br.select_form('searchKey')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 524, in select_form
    raise FormNotFoundError("no form matching "+description)
FormNotFoundError: no form matching name 'searchKey'

是 br.forms() 为空。

我的问题是:为什么 mechanize 无法选择 html 中存在的表单?处理这个问题的可能解决方案是什么?

谢谢

I need to simulate the process of inputting an item name and clicking the search button on http://ccclub.cmbchina.com/ccclubnew/.

if I inspect directly in HTML, the search form is described with name "searchKey"

<span class="searchinput">
     <input type="text" name="searchKey" id="searchKey" maxlength="25">
</span>

here below is the script:

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

# Want debugging messages?
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)

br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

br.open("http://ccclub.cmbchina.com/ccclubnew/")

I get

br.select_form('searchKey')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 524, in select_form
    raise FormNotFoundError("no form matching "+description)
FormNotFoundError: no form matching name 'searchKey'

and the br.forms() is empty.

my question is: why mechanize cannot select the form which exists in html? what's the possible solution to handle this?

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝海似她心 2024-12-14 12:25:05

名为 searchKey 的 input 本身不是表单。表单带有

标签,但老实说,这个搜索框似乎不是表单的一部分;您必须模拟设置输入的文本并按下它。
在此处输入图像描述

The input with name searchKey itself is no form. A form comes with the <form> tag, but honestly, this searchbox appears not to be part of a form; you'll have to simulate setting the text of the input and pressing it.
enter image description here

如果没有你 2024-12-14 12:25:05

如何使用 lxmlBeatifulSoup

How about using lxml or BeatifulSoup?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文