【问题标题】:How to use mechanize to enter username and password如何使用mechanize输入用户名和密码
【发布时间】:2016-06-25 19:53:06
【问题描述】:

我正在尝试使用 mechanize 抓取需要我登录的网站。这是我的代码的开始。

#!/usr/bin/python

#scrape the admissions part of SAFE

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

# 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)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

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

# The site we will navigate into, handling it's session
br.open('https://url')

# View available forms
for f in br.forms():
    print f

这给了我

<POST https://userstuff application/x-www-form-urlencoded
  <HiddenControl(lt=LT-227363-Ja4QpRvdxrbQF0nb7XcR2jQDydH43s) (readonly)>
  <HiddenControl(execution=e1s1) (readonly)>
  <HiddenControl(_eventId=submit) (readonly)>
  <TextControl(username=)>
  <PasswordControl(password=)>
  <SubmitButtonControl(submit=) (readonly)>
  <CheckboxControl(warn=[on])>>

我现在如何输入用户名和密码?

我试过了

# Select the first (index zero) form 
br.select_form(nr=0)

# User credentials
br.form['username'] = 'username'
br.form['password'] = 'password'

# Login
br.submit()

但这似乎不起作用。

【问题讨论】:

  • 你试过br.submit()吗?
  • @PadraicCunningham 是的,对不起。我不小心错过了我的问题。
  • 可以分享链接吗?
  • 您能提供您要提交的表单的 html 吗?您需要确认表单输入名称实际上是usernamepassword
  • 表单 id 是 fm1 stackoverflow.com/questions/10495313/…,您可以尝试使用它,以防您从中选择错误,如果这不起作用,那么还有其他事情发生并且没有看到实际链接很难说哪里出了问题

标签: python mechanize


【解决方案1】:

最后这对我有用

#!/usr/bin/python

#scraper

import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text

# 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)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

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

# The site we will navigate into, handling it's session
br.open('url1')

# View available forms
for f in br.forms():
    if f.attrs['id'] == 'fm1':
        br.form = f
        break

# User credentials
br.form['username'] = 'password'
br.form['password'] = 'username'

# Login
br.submit()

#Now we need to confirm again

br.open('https://url2')

# Select the first (index zero) form 
br.select_form(nr=0)

# Login
br.submit()

print(br.open('https:url2').read())

【讨论】:

    【解决方案2】:

    我会查看 html 表单,而不是 mechanize 提供给您的内容。以下是我过去尝试填写的表格示例。

    <input type="text" name="user_key" value="">
    <input type="password" name="user_password">
    

    下面是我使用上面的表格登录该网站的代码

    # 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_refresh(False) 
    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)
    
    # User-Agent
    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')]
    
    # The site we will navigate into, handling it's session
    br.open('https://www.website.com/login')
    
    #select the first form
    br.select_form(nr=0)
    
    #user credentials
    br['user_key'] = 'myusername@gmail.com'
    br['user_password'] = 'mypassword'
    
    # Login
    br.submit()
    
    link = 'http://www.website.com/url_i_want_to_scrape'
    
    br.open(link)
    response = br.response().read()
    print response
    

    您的问题可能是您选择了错误的表单,给出了不正确的字段名称

    【讨论】:

    • 我展示了一个我遇到同样问题的例子以及解决它的方法。当然网站不一样,但该技术也可以在他/她的情况下使用
    • 我得到 AttributeError: type object 'CookieJar' has no attribute 'LWPCookieJar' 错误,当我使用它时。虽然我导入了 cookielib(现在称为 cookiejar)。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多