Twill作为网络自动化工具仍然具有相关性吗?如果是,那么为什么目前没有维护?如果不是,那么Mechanize是否已经进一步成熟以支持Twill风格的简单脚本?或者是否有另一个包装已经加紧填补空白?
我能够使用Twill在python中快速设置几个测试套件,但是我对如何访问Twill在我的python程序中吐出的信息感到困惑.也就是说,我可以执行showforms()并查看整齐列出的表单值,我可以使用fv更新表单值并提交.但是如何以python var的形式访问其中一个表单值?我怎么能这样说:someField1Value = fv("1","someField1")
我知道有关机械化+ Google App Engine的先前问题, 我应该使用什么纯Python库来抓取网站? 和Mechanize和Google App Engine.
也有一些代码在这里,我不能让在App Engine上工作,抛
File “D:\data\eclipse-php\testpy4\src\mechanize\_http.py”, line 43, in socket._fileobject(”fake socket”, close=True)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\dist\socket.py”, line 42, in _fileobject
fp.fileno = lambda: None
AttributeError: ’str’ object has no attribute ‘fileno’
INFO 2009-12-14 09:37:50,405 dev_appserver.py:3178] “GET / HTTP/1.1? 500 -
Run Code Online (Sandbox Code Playgroud)
有人愿意分享他们的工作机械化和附加代码吗?
向服务器发送请求后
br.open('http://xxxx')
br.select_form(nr=0)
br.form['MESSAGE'] = '1 2 3 4 5'
br.submit()
Run Code Online (Sandbox Code Playgroud)
我得到了响应标题,其中包含了set-cookie
Set-Cookie: PON=xxx.xxx.xxx.111; expires=Tue, 17-Mar-2015 00:00:00 GMT; path=/
Run Code Online (Sandbox Code Playgroud)
因为机械化似乎无法记住cookie,所以我想为br设置cookie.我该怎么做?
cj = mechanize....?
br.set_cookiejar(cj)
Run Code Online (Sandbox Code Playgroud)
我不知道.请帮忙
我正在尝试使用机械化发送POST,但是我的代码有时无法正常工作(我知道为什么)。我已经使用机械化,斜纹布和要求。机械化和斜纹化处理有效,而对请求不起作用。可能是我做错了。
我的机械化代码。以下作品:
#!/usr/bin/env python
import sys
import urllib
import mechanize
from mechanize import ParseResponse, urlopen, urljoin
response = urlopen(url)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
form["username"] = "avi"
form["password"] = "stackoverflow"
urlopen(form.click())
Run Code Online (Sandbox Code Playgroud)
我的斜纹代码。它也可以工作:
import os
import twill
from twill.commands import *
out = open(os.devnull,"w")
twill.set_output(out)
go(url)
formvalue("1", "username", "avi")
formvalue("1", "password", "stackoverflow")
submit()
go(url2) #some protected page
content = show()
print 'content is',content[:100]
Run Code Online (Sandbox Code Playgroud)
据我了解,机械化或斜纹首先获取页面,填写表格并发送表格。但是这里的问题是,有时目标页面显示随机页面,没有任何形式。在那种情况下,我会得到一个错误,显然是因为没有表格可以显示。我不想处理此错误,因为我已经知道帖子的网址。即使显示了一些随机页面,我单击下一步后,也会加载相同的表单。POST网址的所有字段均保持不变。所以我想直接发送POST请求,因为我已经知道了所需的所有细节。这是我的代码,基于:
browser = mechanize.Browser()
parameters = {"username" : "avi",
"password" : "stackoverflow",
}
data …Run Code Online (Sandbox Code Playgroud) 我刚刚开始在Python中使用mechanize,我已经遇到了一些问题.我已经浏览了StackOverflow和谷歌,我看到人们说文档很棒,应该很容易让它工作,但我想我不知道如何寻找那些文档,因为我所有的可以找到的代码示例并没有真正教我如何做我正在尝试的特定事情.如果有人能指出我这样的文件,我很乐意自己阅读并解决我的问题.
对于实际问题,我试图通过在表单中发送我的用户名和密码信息来登录网站.当信息正确时,我通常会被重定向,但它在机械化中不起作用.
这是我没有得到的部分,因为如果我在调用submit后立即打印页面的html内容,页面将显示一个变量,表明身份验证有效.如果我将密码更改为不正确的密码,则html会显示"无效凭据"消息,就像我正常浏览网站一样.
这是我如何做的代码示例.请记住,这可能是完全错误的,因为我只是尝试应用我在示例中找到的内容:
import mechanize
import cookielib
# Start Browser
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(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.open('http://www.complexejuliequilles.com/')
for l in br.links(url_regex='secure'):
br.follow_link(l)
br.select_form('form1')
br.form['fldUsername'] = 'myUsername'
br.form['fldPassword'] = 'myPassword'
br.submit()
Run Code Online (Sandbox Code Playgroud)
在这个特定的例子中,我打开http://www.complexejuliequilles.com,然后我按照底部的链接,其中包含文本"管理",我在表单中输入我的凭据,然后我提交它.通常情况下,我会被重定向到我所在的第一页,但有更多按钮只能由管理员使用.我想点击其中一个链接填写另一个表单,添加一个用户列表,其中包含我们的电子邮件地址,姓名等.
我有什么简单的东西吗?我想我得到了基础知识,但我不知道该库足以找到重定向出了什么问题.
我试图找到一个给定的字符串,让我们在给定页面中说"Hello".到目前为止,我有以下内容:
agent = Mechanize.new
page = agent.get('http://www.google.de/')
Run Code Online (Sandbox Code Playgroud)
我现在该怎么办?我见过搜索方法,但它只接受XPath/CSS表达式.我可以尝试使用xpath进行搜索,但是有更好的方法吗?
#!/usr/bin/env python
import mechanize
mech = mechanize.Browser()
page = br.open(SchoolRank('KY'))
Run Code Online (Sandbox Code Playgroud)
得到:
Traceback (most recent call last):
File "mechanize.py", line 2, in <module>
import mechanize
File "/home/jcress/Documents/programming/schooldig/trunk/mechanize.py", line 12, in <module>
mech = mechanize.Browser()
AttributeError: 'module' object has no attribute 'Browser'
Run Code Online (Sandbox Code Playgroud)
我很困惑.我为2.6和2.7安装了模块,结果相同......
我正在编写一个工具,需要收集网页div中的所有网址,但不包括该div之外的网址.简化页面看起来像这样:
<div id="bar">
<a link I dont want>
<div id="foo">
<lots of html>
<h1 class="baz">
<a href=”link I want”>
</h1>
<h1 class="caz">
<a href=“link I want”>
</h1>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当用Firebug选择div并选择XPath时,我得到://*[@ id ="foo"].到现在为止还挺好.但是我一直试图找到div foo中的所有url.请帮我找到一种方法来提取元素中href定义的url.
示例代码类似于我正在使用w3schools的代码:
import mechanize
import lxml.html
import cookielib
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', 'WatcherBot')]
r = br.open('http://w3schools.com/')
html = br.response().read()
root = lxml.html.fromstring(html)
hrefs = root.xpath('//*[@id="leftcolumn"]')
# Found no solution yet. Stuck
Run Code Online (Sandbox Code Playgroud)
感谢您的时间!
我正在使用脚本来测试网站是否运行顺畅,基本上我每20分钟左右打开一次网站并检查响应时间等等.像这样:
while True:
MechBrowser = mechanize.Browser()
Response = MechBrowser.open("http://example.com")
time.sleep(1000)
Run Code Online (Sandbox Code Playgroud)
我知道python本身会进行垃圾收集,我们真的不应该打扰,但是当我检查网络监视器时,我总会找到几个未关闭的连接,每个连接运行1小时或更长时间.并非所有打开的连接都会挂在那里,只有其中一些.我很困惑,或者有一种方法可以手动销毁这些实例?
我发现如何使用教程从谷歌搜索中检索主题的html页面.这在教程中给出.
import mechanize
br = mechanize.Browser()
br.open('http://www.google.co.in')
br.select_form(nr = 0)
Run Code Online (Sandbox Code Playgroud)
直到这一点我理解它才能找回这个表格.然后就是这样
br.form['q'] = 'search topic'
br.submit()
br.response.read()
Run Code Online (Sandbox Code Playgroud)
这会输出与搜索主题相关的页面的html.但我怀疑br.form [parameter]中的这个参数应该是什么?因为我尝试了谷歌新闻,它取得了成功的结果.有人可以帮助我吗?
我最近从perl迁移到python并且正在更新我使用perls WWW :: Mechanize使用python mechanize模块的一些脚本.
到目前为止一切都很好,但我无法在任何地方找到HTTP状态代码?(200,301等)
我用Google搜索并发现了这个,但他们不是一种只查看代码的方法吗?
使用Python中的Mechanize获取和捕获HTTP响应
谢谢.
python screen-scraping mechanize web-scraping mechanize-python
我在为python机械化时遇到了一个错误,其中尝试打开的有效链接给我以下错误:
urlopen error [Errno 8] nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)
机械化无法打开它们不是问题,因为当我使用机械化在交互式Python中打开它们时,没有错误。因此,我怀疑打开过多的机械化浏览器存在问题。
如何关闭机械化浏览器?
是否有类似br.close()的命令?
TIA
所以我目前有这个代码来读取一个看起来像这样的accounts.txt文件:
username1:password1
username2:password2
username3:password3
Run Code Online (Sandbox Code Playgroud)
然后我有了这个(感谢这里的成员)阅读accounts.txt文件并将其拆分为用户名和密码,以便我以后可以打印它.当我尝试使用与此代码分开的用户名和密码打印第1行时:
with open('accounts.txt') as f:
credentials = [x.strip().split(':') for x in f.readlines()]
for username,password in credentials:
print username[0]
print password[0]
Run Code Online (Sandbox Code Playgroud)
它打印出来:
j
t
a
2
a
3
Run Code Online (Sandbox Code Playgroud)
(这些是我在文本文件中的三行,正确分割,但它打印所有行,只打印每行的第一个字母.)
我尝试了几种不同的方法,没有运气.任何人都知道该怎么做?
谢谢你的帮助.非常感谢.这是我的第二天编程,我为这么简单的问题道歉.
mechanize-python ×13
python ×12
mechanize ×7
twill ×2
attributes ×1
csrf ×1
forms ×1
lxml ×1
module ×1
python-2.7 ×1
python-2.x ×1
python-3.x ×1
ruby ×1
web-crawler ×1
web-scraping ×1