我在一个rake任务中使用Mechanize,该任务由Heroku上的ruby应用程序的调度程序附加组件运行.在脚本中,我正在登录一个直到最近脚本无法再登录的网页.当我开始调试时,当我在heroku控制台中运行脚本而不是在我的本地控制台上时,Mechanize会显示不同的表单字段.
本地ruby控制台显示以下字段:
>> asf.fields.each do |f| puts f.name end
__VIEWSTATE
__PREVIOUSPAGE
__EVENTVALIDATION
login$field
password$field
Run Code Online (Sandbox Code Playgroud)
Heroku控制台显示一个未出现在html源代码中的附加字段:
>> asf.fields.each do |f| puts f.name end
__VIEWSTATE
__PREVIOUSPAGE
__EVENTVALIDATION
login$field
password$field
captcha$txtCaptcha
Run Code Online (Sandbox Code Playgroud)
当我发出:
>> asf.click_button
Run Code Online (Sandbox Code Playgroud)
更新: 我尝试将用户代理更改为几个不同的浏览器别名,但没有运气.似乎来自Heroku的IP地址导致了验证码的提供.是否可以通过代理服务器发出请求或使用Tor来防止IP暴露?
我在我的界面中使用了10个按钮,并且需要不时地更改按钮的选择器.
我需要使用:
-(void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)
在我更改选择器之前或者我可以使用:
-(void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)
我很担心,如果我使用addTarget改变选择:方法SAN的removeTarget:方法,我会基本上是"堆起来"我的UIButton被按下时,它开火选择.
我在启动和停止NSTimers时遇到了问题.文档说[计时器无效]停止计时器;
我有一个声明为这样的计时器对象
.h
NSTimer *incrementTimer;
@property (nonatomic, retain) NSTimer *incrementTimer;
.m
@synthesize incrementTimer;
-(void)dealloc {
[incrementTimer release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
-通常.
如果需要,我的方法执行以下操作:
-(void)setGenCount {
if(!condition1 && condition2) {
incrementTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0
target: self
selector:@selector(incrementBatteryVoltage:)
userInfo: nil
repeats: YES];
}
}
Run Code Online (Sandbox Code Playgroud)
上面的一切都很好.但是,一旦该计时器完成它的工作,我希望它自己失效.我使计时器无效,因为有一个可以被调用的相等减量方法,如果它仍然是活动的,它将与incrementTimer作对.(之前,我注意到我的两个计时器,如果活跃,通过增加和减少值(一种战斗)在同一个ivar上行动......没有崩溃)调用的选择器如下工作:
-(void)incrementBatteryVoltage:(NSTimer *)timer {
if(battVoltage < 24.0) {
generatorDisplay.battVoltage += 0.1;
}
if(battery1Voltage == 24.0) {
[timer invalidate];
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个减少电池数量的相同方法.(前面提到过)
由于我的程序设计:界面模拟电压显示.当"机器"关闭时,无论电压值是多少,我都希望所有定时器都无效.我这样做是通过检查计时器是否有效来完成的.
-(void)deEnergizeDisplays {
if([decrementTimer isValid]) {
[decrementTimer invalidate];
decrementTimer = nil;
}
if([incrementTimer isValid]) {
[incrementTimer invalidate]; …
Run Code Online (Sandbox Code Playgroud) 我熟悉html和css一起工作的方式.最近我正在预览苹果演示的一些html5内容,看到他们使用的是html5/css/javascript.我正处于需要知道javascript是否必须学习的地步; 或者如果我能找到CSS3和HTML5的类似解决方法.
编辑澄清意图:
我的目标是拥有一个自己的博客页面,其中包含Twitter提要和一些基本动画.
我需要学习javascript吗?
我正在为我的应用程序添加自定义按钮/键盘.到目前为止,我有一个UIImageView子类,其中包含一个动画,可以从屏幕底部滑动,然后在用户不再需要时向下滑动.但是,我无法将UIButtons添加到此UIImageView中.
由于这是UIView的子类,我试图通过initWithFrame:方法向我的视图添加按钮.(slideDown方法是添加的动画)
在我的UIImageView子类中,我添加了一个UIButton ivar对象:
-(id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame: frame]) {
UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
button.frame = CGRectMake(16.0, 20.0, 50.0, 50.0);
[button setTitle: @"Go" forState: UIControlStateNormal];
[button addTarget: self action: @selector(slideDown) forControlEvents: UIControlEventTouchUpInside];
self.button1 = button;
[self addSubview: button1];
NSLog(@"Button added");
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
在我的视图控制器中,我在 - (void)viewDidLoad:方法中实例化我的UIIMageView子类,如下所示:
-(void)viewDidLoad {
//other objects init'ed
ButtonPad *customPad = [[ButtonPad alloc] initWithImage: [UIImage imageNamed: @"ButtonPad.png"]];
customPad.frame = CGRectMake(0.0, 480.0, 320.0, 300.0);
self.buttonPad = customPad;
[self.view addSubview: buttonPad];
[customPad release]; …
Run Code Online (Sandbox Code Playgroud) cocoa-touch ×2
iphone ×2
objective-c ×2
uibutton ×2
cocoa ×1
css3 ×1
heroku ×1
html5 ×1
javascript ×1
nstimer ×1
tor ×1
uicontrol ×1
uiimageview ×1
uiview ×1