【问题标题】:Python mechanize saying existing control does not existPython mechanize 说现有控件不存在
【发布时间】:2014-04-15 16:12:27
【问题描述】:

我正在尝试在 python 中抓取受密码保护的网站。我的代码如下:

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup

br = mechanize.Browser()

cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

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)

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

br.addheaders = [('User-agent', 'Chrome')]

br.open('https://monitor1.returnpath.net/login.php')

for f in br.forms():
print f

br.select_form(nr=1)

br.form['email'] = 'email'
br.form['password'] = 'password'

for 循环返回这个:

<form1 POST https://monitor1.returnpath.net/login.php application/x-www-form-urlencoded
  <TextControl(email=)>
  <PasswordControl(password=)>
  <CheckboxControl(remember=[1])>
  <SubmitControl(Submit=Sign In) (readonly)>>
<GET http://now.eloqua.com/e/f2.aspx application/x-www-form-urlencoded
  <TextControl(e=)>
  <HiddenControl(lang=NA) (readonly)>
  <HiddenControl(elqSiteID=841) (readonly)>
  <HiddenControl(elqFormName=nLRegFooter-1347904420246) (readonly)>
  <SubmitControl(<None>=Sign Me Up) (readonly)>
  <SubmitButtonControl(<None>=) (readonly)>>
<POST https://monitor1.returnpath.net/send_feedback.php application/x-www-form-urlencoded
  <HiddenControl(size=) (readonly)>
  <HiddenControl(nps=) (readonly)>
  <TextareaControl(desc=)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>
  <IgnoreControl(<None>=<None>)>>

还有这个错误:

mechanize._form.ControlNotFoundError: no control match name 'email'

输出表明找到了“电子邮件”,所以我不确定为什么它说没有与之匹配的控件?

【问题讨论】:

    标签: python web-scraping mechanize scrape


    【解决方案1】:

    它的零索引。试试下面的代码:

    br.select_form(nr=0)
    

    【讨论】:

    • 就这样。非常感谢!
    猜你喜欢
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多