python mechanize使用

python mechanize使用遇到了一些坑 这个 mechanize 不支持 js 代码 如果遇到了 lt buttonid submit type button onclick sign this signin class btnbtn bannermt10 gt 提交 lt button gt 这样的 js 代码怎么都通不过 要是有人知道怎么弄欢迎告诉我 起因是要褥 packethub 上的羊毛 然后查

遇到了一些坑,这个mechanize不支持js代码,如果遇到了

<button id="submit" type="button" οnclick="sign(this,'signin')" class="btn btn-banner mt10">提 交</button>

这样的js代码怎么都通不过…要是有人知道怎么弄欢迎告诉我.

起因是要褥packethub上的羊毛,然后查了一下脚本,发现了mechanize这个包,主要用来模拟浏览器进行操作

脚本如下

from mechanize import Browser
from bs4 import BeautifulSoup
import re

def login(br, url):
    page = br.open(url)
    br.select_form(nr=1)
    for f in br.forms():
        print f
    br.form["email"] = "xxxxgmail.com"
    br.form["password"] = "xxxx"
    br.submit()
    
def browse(br, url):
    page = br.open(url)
    soup = BeautifulSoup(page.read(), "html5lib")
    title_div = soup.find("div", class_="dotd-title")
    title = title_div.get_text()
    account_div = soup.find("div" ,id="account-bar-logged-in")
    print account_div
    return title
 
def click(br):
    for link in br.links():
        print link.url, link.text
    req = br.click_link(url_regex=re.compile("freelearning-claim"))
    print "req: ",req
    for control in br.form.controls:
        print control
        print "type=%s, name=%s value=%s" % (control.type, control.name, br[control.name])
    br.open(req)
    print br.title(), br.geturl()
    
    
br = Browser()
br.set_handle_redirect(True)
success=True

try:
    login(br, "http://www.packtpub.com")
    print "LOGIN"
    book_title = browse(br, "http://www.packtpub.com/packt/offers/free-learning")
    print book_title
    click(br)
except Exception, e:
    success=False
    error_message = str(e)
    
if(success): outcome = "Success: Grabbed the book " + book_title.strip() + " for free!"

然后自己写了些玩一玩的(还打算用这个抢票的…

主要是对一些表单的操作,但是现在不用js的页面应该很少了…

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys,mechanize
import re
reload(sys)
sys.setdefaultencoding('utf-8')

#Browser
br = mechanize.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)

'''
#debugging?
br.set_debug_http(True)
br.set_debug_redirects(True)
br.set_debug_responses(True)
'''
#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')]
#打开页面
r = br.open(sys.argv[1])
# print br.geturl()
#选择表单
# br.select_form(class_="s_form")
#查看所有表单
for  f in br.forms():
    print f
br.select_form(nr=0)

'''
print "html:\n", html
print "Response:\n", br.response().read()
print "Title:\n",br.title()
print "Info:\n",r.info()
'''
#选取link
for link in br.links():
    if link.text=="机因":
        print link.url + ": " + link.text , link.attrs, link.tag
#查看所有的control
for control in br.form.controls:
    print control
    print "type=%s, name=%s value=%s" % (control.type, control.name, br[control.name])
#跳转
new_link = br.click_link(text='机因')

br.open(new_link)
print br.title()



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232351.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • traceroute 命令使用方法详解

    traceroute 命令使用方法详解通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MSWindows中为tracert。traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)..

    2025年6月10日
    3
  • vue less CSS滚动条样式修改美化变细「建议收藏」

    vue less CSS滚动条样式修改美化变细「建议收藏」vuelessCSS滚动条样式修改美化变细

    2022年10月21日
    1
  • 远程服务器mstsc命令,远程桌面连接命令mstsc怎么用

    远程服务器mstsc命令,远程桌面连接命令mstsc怎么用现在经常在家远程办公,肯会使用到远程桌面连接命令mstsc远程管理电脑或者服务器,,远程桌面连接命令mstsc的使用还是很简单的。但是对于没用过远程桌面连接命令的人来说,首次使用可能连需要进行设置都不清楚。小编在这将远程桌面连接命令mstsc的使用方法进行详细介绍首先需要对被远程控制的电脑A进行设置:1  在电脑A上点击【开始】—【控制面板】,找到【用户帐户】,点击进入后为当前用户账户创建密码,输…

    2025年5月26日
    1
  • MapReduce编程实例(一)

    MapReduce编程实例(一)前提准备:1.hadoop安装运行正常,请参考2.集成开发环境正常,请参考Ubuntu搭建Hadoop源码阅读环境开发示例:WordCount本示例详细的介绍如何在集成环境中运行第一个MapReduce程序WordCount

    2022年6月18日
    31
  • 小猴子吃了一堆桃,第一天吃了一半_Java猴子吃桃问题

    小猴子吃了一堆桃,第一天吃了一半_Java猴子吃桃问题7-5 猴子吃桃问题 (20分)一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?输入格式: 输入在一行中给出正整数N(1<N≤10)。输出格式: 在一行中输出第一天共摘了多少个桃子。输入样例: 3 …

    2022年8月18日
    10
  • 哪个游戏盒子里有JAVA_关于点和盒子游戏的Java minimax

    哪个游戏盒子里有JAVA_关于点和盒子游戏的Java minimax我想建议您完全重新考虑代码.查看代码的问题(以及为什么这里没有很多响应)是很难遵循并且很难调试.例如,什么是gs.getRemainingLines,它究竟做了什么?(为什么剩下的线而不是所有合法的线?)但是,通过一些简化,可以更容易地弄清楚发生了什么并修复它.在抽象层面,minimax只是这个过程:floatminimax_max(GameStateg){if(gisterminal…

    2022年7月7日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号