我正在尝试使用Java中的HtmlUnit登录网站.首先我输入用户名然后输入密码.之后我需要从下拉框中选择一个选项.输入用户和密码似乎有效,但当我尝试从下拉框中选择项目时,我收到错误.谁能帮我解决这个问题?我的代码如下:
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlOption;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSelect;
public class homePage {
public static void main(String[] args) throws Exception {
final WebClient webClient = new WebClient();
final HtmlPage page = webClient.getPage("website name here");
HtmlElement usrname = page.getElementByName("username");
usrname.click();
usrname.type("myusername");
HtmlElement psswrd = page.getElementByName("password");
psswrd.click();
psswrd.type("mypassword");
HtmlSelect select = (HtmlSelect) page.getElementById("cmbProducts");
HtmlOption option = select.getOptionByValue("ITDirect");
select.setSelectedAttribute(option, true);
HtmlElement signin = page.getElementByName("SignIn");
signin.click();
System.out.println(page.getTitleText());
webClient.closeAllWindows();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个大型的金融应用程序,我主要使用Java.现在,为了获得一些数据,我需要编写一个小脚本(<200 LOC)来下载CSV文件(超过20,000个)并将它们存储到磁盘上.我需要这个很快,但是,几分钟对我没有任何影响.我打算用Java编写它并不是很难,但是,如果我用Ruby编写它会更快,所以我想知道Ruby(或JRuby)之间的速度是否会有很大差异和Java.20,000个文件都是大约1/2兆字节,我正在下载的服务器并不热衷于泄露数据(它完全合法,不用担心),所以,我的应用程序必须随机睡觉之间,如果网站拒绝请求,它必须睡3分钟.
建议使用任何其他易于使用的Java语言.
即存储在堆栈上的值类型数据结构的名称是什么,它引用堆上的对象?
即对象引用是System.What(如果有的话)?
我知道这不是指针,不是吗?
我知道它"像"一个指针.
我知道它是"垃圾收集器所有".
我非常相信当你实例化一个对象(即一个引用类型)时,IL会给CLR指令以在内存中分配"堆栈引用/堆值对"(例如
...
.locals init ([0] int32 i1,
[1] object o1,
[2] int64 l1)
IL_0000: nop
IL_0001: ldc.i4.4
IL_0002: stloc.0
IL_0003: newobj instance void [mscorlib]System.Object::.ctor()
IL_0008: stloc.1
IL_0009: ldloc.0
IL_000a: box [mscorlib]System.Int32
...
Run Code Online (Sandbox Code Playgroud)
),并且在语言或IL级别上无法访问实际引用(复制/分配给新引用或操作引用对象除外),并且CLR/CLI和CLR创建和管理对象引用的分配将OBJECTREF DWORD值注入堆栈(或类似).
请让我直截了当,并为所有图书作者和谷歌搜索结束这一点.
谢谢!
我刚看到这个帖子,描述了如何添加条件宏: #define的条件值
但在我的情况下,我在条件中定义一个函数.
#if TARGET_IPHONE_SIMULATOR
#define doSomething(){\
\\ does something
}\
#else
#define doSomething(){\
\\ does something else
}\
#endif
Run Code Online (Sandbox Code Playgroud)
这确实有效,除了我导致gcc编译器抛出此警告:
"doSomething" redefined
This is the location of the previous arguments
Run Code Online (Sandbox Code Playgroud)
是否有任何解决方法来帮助摆脱警告?
更新:
所以我尝试在我的定义中包含条件:
#define doSomething(){\
#if TARGET_IPHONE_SIMULATOR
\\ do something
#else
\\ do something else
#endif
}\
Run Code Online (Sandbox Code Playgroud)
但是会抛出一个错误:
error: '#' is not followed by a macro parameter.
Run Code Online (Sandbox Code Playgroud) 在C#中,我有一个接口,并且有一些类将实现此接口.我有一个通用的实用程序类,我想限制,以便实用程序类只能使用实现该接口的类型声明,如下所示,我该怎么办?
public interface IMyInterface
{}
public class A : IMyInterface {} // can pass into UtilityClass
public interface B : IMyInterface{}
public class C : B {} // can pass into UtilityClass
public class D {} // can Not pass into UtilityClass
public class UtilityClass<T is IMyInterface>
{
// some utility function
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我的问题是关于命名,设计和实现的选择.我可以看到自己走向两个不同的方向,如何解决问题,我很想知道其他可能遇到类似问题的人会处理这个问题.它是部分美学,部分功能.
关于代码的一点背景......我创建了一个名为的类型ISlice<T>,它提供了对项目源的一部分的引用,这些项目可以是一个集合(例如数组,列表)或字符串.核心支持来自一些实现类,这些类支持快速索引,使用切片的Begin和End标记从原始源获取项目.目的是提供类似于Go语言提供的切片功能,同时使用Python样式索引(即支持正负索引).
为了使创建切片(实例ISlice<T>)更容易和更"流畅",我创建了一组扩展方法.例如:
static public ISlice<T> Slice<T>(this IList<T> source, int begin, int end)
{
return new ListSlice<T>(source, begin, end);
}
static public ISlice<char> Slice(this string source, int begin, int end)
{
return new StringSlice(source, begin, end);
}
Run Code Online (Sandbox Code Playgroud)
还有其他一些,例如提供可选的开始/结束参数,但上面的内容足以满足我的需求.
这些例程运行良好,可以轻松切片集合或字符串.我还需要的是获取切片并将其创建为数组,列表或字符串的方法.这就是事情变得"有趣"的地方.最初,我认为我需要创建ToArray,ToList扩展方法,但后来记得LINQ变体在集合实现时执行优化ICollection<T>.在我的情况下,ISlice<T>它确实继承了它,虽然很多我的懊恼,因为我不喜欢从像Add这样的方法抛出NotSupportedExceptions.无论如何,我免费获得这些.大.
如果没有内置支持将一个IEnumerable<char>轻松转换回字符串,那么转换回一个字符串呢?我发现最接近的是string.Concat重载之一,但它不能尽可能高效地处理字符.从设计角度来看同样重要的是,它不会像"转换"例程一样跳出来.
第一个想法是创建一个ToString扩展方法,但这不起作用,因为ToString是一个实例方法,这意味着它胜过扩展方法,永远不会被调用.我可以覆盖ToString,但行为将是不一致的,因为ListSlice<T>特殊情况需要它的ToString,其中T是一个char.我不喜欢这样,因为当type参数是char时ToString会给出一些有用的东西,但在其他情况下是类名.此外,如果将来创建其他切片类型,我必须创建一个公共基类以确保相同的行为,或者每个类必须实现相同的检查.接口上的扩展方法可以更优雅地处理.
扩展方法引出了一个命名约定问题.显而易见的是使用ToString,但如前所述,它是不允许的.我可以把它命名为不同的东西,但是什么?ToNewString?NewString?CreateString?To-family方法中的某些东西会让它落入ToArray/ToList例程,但是当在intellisense和代码编辑器中看到时,ToNewString突然变成'奇数'.NewString/CreateString不像你必须知道的那样可以发现它们.它不符合To-family方法提供的"转换方法"模式.
去覆盖ToString并接受硬编码到ListSlice<T>实现和其他实现中的不一致行为?使用更灵活,但可能更糟糕的扩展方法路由?我还没有考虑过第三种选择吗?
我的直觉告诉我尽管保留了我的ToString但是,它也发生在我身上......你会不会考虑ToString给你一个集合/可枚举类型的有用输出?这会违反最少惊喜的原则吗?
更新
切片操作的大多数实现提供了来自用于切片的任何源的数据的副本,尽管是子集.这在大多数用例中都是完全可以接受的,因为您只需返回相同的数据类型即可获得干净的API.如果对列表进行切片,则返回一个列表,其中仅包含切片中指定范围内的项目.如果切片字符串,则返回一个字符串.等等.
我在上面描述的切片操作在处理使这种行为不合需要的约束时解决了一个问题.例如,如果使用大型数据集,则切片操作将导致不必要的额外内存分配,更不用说复制数据对性能的影响.如果在获得最终结果之前切片将对其进行进一步处理,则尤其如此.因此,切片实现的目标是引用更大的数据集,以避免对信息进行不必要的复制,直到它变得有益.
问题在于,在处理结束时,希望将基于切片的处理数据转换回更多API和.NET友好类型,如列表,数组和字符串.它使数据更容易传递到其他API.它还允许您丢弃切片,因此也可以丢弃切片引用的大数据集.
假设我们拥有受CQRS启发的架构,其中包括命令,域模型,域事件,读取模型DTO等组件.
当然,我们可以在域模型中使用值对象.我的问题是,它们是否也应用于:
我没有看到任何在上述组件中使用Value Objects(VO)的示例.相反,使用原始类型.也许这只是简单的例子.毕竟,我对DDD中使用VO的理解是它们可以作为整个应用程序的粘合剂.
我的动机:
命令.
假设用户提交包含地址字段的表单.我们有Address Value Object来表示这个概念.在客户端构造命令时,我们应该验证用户输入,当它格式正确时,我们可以在那里创建Address对象并用它初始化Command.我认为不需要将Address对象的创建委托给命令处理程序.
域事件.
域模型已经在值对象方面运行,因此通过使用VO发布事件而不是将它们转换为基本类型,我们可以避免使用某些映射代码.我很确定在这种情况下使用VO是可以的.
DTO的.
如果我们的查询端DTO可以包含值对象,则可以提供更多灵活性.例如,如果我们有Money对象,我们可以选择是以EUR还是USD显示,不需要更改Read Model.
我写了一个方法来做一些东西并捕获坏的文件名.应该发生的是如果路径不存在,它会抛出一个IOError.但是,它认为我的异常处理是错误的语法......为什么?
def whatever():
try:
# do stuff
# and more stuff
except IOError:
# do this
pass
whatever()
但在它进入调用之前whatever(),它会打印以下内容:
Traceback (most recent call last):
File "", line 1, in
File "getquizzed.py", line 55
except IOError:
^
SyntaxError: invalid syntax
进口时......帮忙?!
我已经下载了一个python文件xxxxxx.py,该文件应该通过键入命令行在命令行上运行:python xxxxxx.py filename1 filename2
并且应该将这两个文件作为参数.
我想知道是否有一种方法可以使用IDLE来传递这些参数.除了设置之外还有其他方法sys.argv吗?
谢谢
我目前有这个控制器功能:
public ViewResult Edit(int id)
{
//get user from id
var user = _adminRepository.GetUser(id);
return View(user);
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试编辑ID为100的项目,当数据库中没有id为100的用户时,这会在我的视图页面上出现错误.
处理此问题的最佳做法是什么?将它们发送到"创建"页面,或显示友好的错误消息?该重定向功能是否应该在控制器功能中?