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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IT学生学习指南

    IT学生学习指南本文主要为了计算机相关专业的学生而写。内容是从本博主的工作经验和教学经验当中总结出来的一些干货,涵盖了从大一到大四期间学生所遇到的常见问题,包括如何找到满意的工作、如何选择适合自己的工作岗位、如何制定自己的学习计划、如何分辨自身适合考研还是就业、女生的IT之路怎么走、如何锻炼自己的技术等等大学生最关心的问题。如果大家觉得文本值得一看,那就请推荐给身边那些还在迷茫中的孩子们吧!

    2022年6月4日
    22
  • 深度信念网络DBN的一个matlab实例「建议收藏」

    关于深度学习的一些个人浅见:   深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音、图像识别);深度网络指是具有深层(多层)网络结构的神经网络。   深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力。   但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响。

    2022年4月12日
    190
  • Web后端开发入门(2)

    Web后端开发入门(2)搭建JavaWeb应用开发环境–Tomcat服务器下载与安装首先,搜索Tomcat,找到如图网址点击,进入Tomcat官网在最左边一栏,有个Download,找到最新版Tomcat9,点击下拉,找到如上图所示位置,Core核心:zip版,tar.gz版(Linux系统),32位版,64位版,安装版。前几个版本都不需要安装,如果你需要安装就下载最后一个,然后选中自己要下载的版本,下载。安装…

    2022年6月22日
    27
  • python 保留两位小数

    python 保留两位小数>>>a=1>>>b=3>>>print(a/b)0>>>#方法一:…print(round(a

    2022年7月5日
    20
  • PhpStorm 2021.12.13 永久激活-激活码分享

    (PhpStorm 2021.12.13 永久激活)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0B…

    2022年3月30日
    57
  • linux中setfacl命令,Linux 中的Setfacl命令

    linux中setfacl命令,Linux 中的Setfacl命令setfacl命令是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。选项-b,–remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。-k,–remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。-n,–no-mask:不要重新计算有效权限。setfacl默认会重新计算ACLmask…

    2022年6月23日
    27

发表回复

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

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