|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
hello eo_support! i'm using trial version! here the code!
Code: C#
HtmlElementCollection eles = webwordpress.Document.GetElementsByTagName("A");
foreach (HtmlElement btn in eles)
{
if (btn.InnerText == "search-text")
{
btn.InvokeMember("Click");
}
}
this use for webbrowser IE! so....how to use with EO.WebBrowser for winform??? maybe i will to buy this control if my problem fixed! thanks!
|
|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
no body help? @@
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi, You will need to use something like this:
Code: C#
//Get the link collection
JSObject links = webView1.EvalScript("document.getElementsByTagName('a')") as JSObject;
//Get the number of elements in the collection
int count = links["length"] as int;
//Loop through the collection
for (int i = 0; i < count; i++)
{
//Get the link element
Element link = JSObject.CastTo<Element>(links[i]);
//Check the innerText property and call click if needed
string innerText = link["innerText"] as string;
if (innerText == "search-text")
innerText.InvokeFunction("click");
}
Hope this helps. Thanks!
|
|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
thanks for the feedback my question ! I will try now ! By the way I want to ask the trial version limits what ? thanks
|
|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
error:
Error 1 Cannot implicitly convert type 'object' to 'EO.WebBrowser.JSObject'. An explicit conversion exists (are you missing a cast?)
i thing you need make demo for my problem! :D
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi,
I apologize for the mistake. You need to add "as JSObject" at the end, and also change JSObject.CastTo to JSObject.CastTo<Element>.
You can not legally use the trial version for production. Also the trial version displays a trial banner.
Thanks!
|
|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
hey! more error here! http://www.upsieutoc.com/image/ne9Vi recomeded you make app demo! :@@
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi, You need to read and understand the code instead of just copy and paste. We are not here to write code for you. We only show you how to do it, you need to read the documentation and understand why it's done that way and then adapt the code to fit your own need. The sample code we gave you to make extensive use of JSObject and EvalScript. You can find more information about them here: http://www.essentialobjects.com/doc/6/advanced/js.aspxThanks!
|
|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
I clearly understand what you code ! serious errors in your code here ! Invoke string it can do ?
Code: C#
//Check the innerText property and call click if needed
string innerText = link["innerText"] as string;
if (innerText == search)
innerText.InvokeFunction("click");
I do not understand ! Why are you not code the properties , functions ... etc just like IE for users to use , but the entire complex ones !
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi, Yes. You are right. It should be link.InvokeFunction. This is the function you should call: http://www.essentialobjects.com/doc/6/eo.webbrowser.jsobject.invokefunction.aspxThanks
|
|
Rank: Member Groups: Member
Joined: 10/9/2014 Posts: 19
|
While you are the author of this control , but you is not possible to reconcile my problem ! Then you re- write a few lines of code without error a lot of tests before post them here ... copy and pase , but I also know the fix ! but the control library does not contain it .... and said " we do not code for you but show you how to do it right .... " while I'm newbie , could also be customers of you .... your job is to solve my problem !
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi,
We apologize for having mistakes in our sample code. We did clearly told you what we changed when we modify the code. Once again, we do expect you to put in reasonable effort to try to understand the code and follow the documentation we provided to you.
In the future please try to maintain a friendly and constructive tone with your post and focus on the technical aspect of things since this is a tech support forum. We will work with you if you work with us. However if you do not want to follow our instructions or are unwilling to put in the effort on your part, we will have no problem to ask you to leave. Remember you have the right to choose any product or vendor you want, but you do not have any right to demand any service here. We will have no problem to refuse service to you if we believe your behavior is inappropriate or harmful either to us or to other customers. The forum is a resource to all our customers, so we will not tolerate such flameful post in the forum from you again. Please regard this as a warning, in the future we will delete such post without notice.
Thanks
|
|
Rank: Member Groups: Member
Joined: 12/24/2015 Posts: 14
|
Unfortunately the code below is buggy and actually not working. I have the same problem. eo_support wrote:Hi, You will need to use something like this:
Code: C#
//Get the link collection
JSObject links = webView1.EvalScript("document.getElementsByTagName('a')") as JSObject;
//Get the number of elements in the collection
int count = links["length"] as int;
//Loop through the collection
for (int i = 0; i < count; i++)
{
//Get the link element
Element link = JSObject.CastTo<Element>(links[i]);
//Check the innerText property and call click if needed
string innerText = link["innerText"] as string;
if (innerText == "search-text")
innerText.InvokeFunction("click");
}
Hope this helps. Thanks!
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
ac2015 wrote:Unfortunately the code below is buggy and actually not working. I have the same problem. eo_support wrote:Hi, You will need to use something like this:
Code: C#
//Get the link collection
JSObject links = webView1.EvalScript("document.getElementsByTagName('a')") as JSObject;
//Get the number of elements in the collection
int count = links["length"] as int;
//Loop through the collection
for (int i = 0; i < count; i++)
{
//Get the link element
Element link = JSObject.CastTo<Element>(links[i]);
//Check the innerText property and call click if needed
string innerText = link["innerText"] as string;
if (innerText == "search-text")
innerText.InvokeFunction("click");
}
Hope this helps. Thanks! The code is correct for the purpose of the original question. Your question is slightly different and we have already replied it in a different thread. Please do not post the same question in multiple threads in the future. Thanks!
|
|
Rank: Newbie Groups: Member
Joined: 2/14/2020 Posts: 7
|
eo_support wrote:ac2015 wrote:Unfortunately the code below is buggy and actually not working. I have the same problem. eo_support wrote:Hi, You will need to use something like this:
Code: C#
//Get the link collection
JSObject links = webView1.EvalScript("document.getElementsByTagName('a')") as JSObject;
//Get the number of elements in the collection
int count = links["length"] as int;
//Loop through the collection
for (int i = 0; i < count; i++)
{
//Get the link element
Element link = JSObject.CastTo<Element>(links[i]);
//Check the innerText property and call click if needed
string innerText = link["innerText"] as string;
if (innerText == "search-text")
innerText.InvokeFunction("click");
}
Hope this helps. Thanks! The code is correct for the purpose of the original question. Your question is slightly different and we have already replied it in a different thread. Please do not post the same question in multiple threads in the future. Thanks! Dear Support-Team :) I did try this code (also some others), but sadly it doesn't work. I want also "just" to find and press a button. Issues (without even starting, I had to comment them out to test the rest): 1. int count = links["length"] as int; Doesn't work ; Error: CS0077 ; WF_EO_WebBrowser C:\Users\Me\source\repos\WF_EO_WebBrowser\WF_EO_WebBrowser\EO_Browser.cs; Description: NULL-Value is not allowed; "links" is NOT empty, I can manually go thought the list for example:
Code: C#
Element link = JSObject.CastTo<Element>(links[2]);
string innerText = link["innerText"] as string;
"innetText" has a usefull string. 2. innerText.InvokeFunction("click"); Doesn't work; No Error Code; Description: innerText has no definition for "InvokeFunction"; If I use "innerText." and then intellisense I can't find "InvokeFunktion" just a list of not similar stuff :/ I also used the doc page but couln't find anything that helps. Btw. if I use "https://www.whatismybrowser.com" I have "Chrome 77", not IE like the original questioner said. Also maybe useful: I use "webControl" "EO.WinForm.WebControl" My active using's:
Code: C#
using EO.WebBrowser;
using EO.WebBrowser.DOM;
using System;
using System.Windows.Forms;
It would be also super awesome if I could get also a example for entering text after I found the right text-field/textBox. Or should I open a new thread for that? Thanks already for any help :)
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi, The recommanded method for such situation is to use JavaScript code. So instead of making multiple .NET calls, you would make a single .NET EvalScript call instead and everything else would be in the JavaScript code. The code will be something like this:
Code: C#
webView.EvalScript("(function()
{
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++)
{
.....
}
})()");
The key here is all the logic are in the JavaScript code you passed to EvalScript. The basic construct of the code is:
Code: C#
webView.EvalScript("(function()
{
...JavaScript code
})();");
Here the JavaScript code is enclosed inside an anonymous function so that variables used in your code won't conflict with anything else. Since the exact logic would be completely implemented in JavaScript code, you can search online for how to implement exactly what you need to do. Thanks!
|
|
Rank: Newbie Groups: Member
Joined: 2/14/2020 Posts: 7
|
Thanks for the fast answer ! :) But sadly that didn't help me. Even if the code would work, there is no option to watch into the variables while debugging. Is there an C# only way or at least a way with less JavaScript? If not, could you please send me at least one examlpe code which is tested and working ? Because the posted code just doesnt work and I played and tested our much with this small piece of code, still nothing works. For example:
Code: C#
webView1.EvalScript("(Function()" +
"{" +
"var links = document.getElementsByTagName('button');" +
"for (var i = 0; i < links.lenght; i++)" +
"{" +
"if (item.outerHTML.Contains(\"class=\"XYZ\"))" +
"{" +
"item.InvokeFunction(\"click\");" +
"}" +
"}" +
"}) ()", true);
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
Hi,
We only show you the idea. You will need to work out the exact code yourself. If we were to write the actual code for our customer, then all our customers will just tell us what they need to do and ask us to write code for them. Obviously we won't be able to do that. So the answer to your request about "example code which is tested and working" is a BIG NO.
If you have questions while trying to understanding the sample code we provided to you on the .NET side directly related to our product, we will be happy to help you further. Again any question about JavaScript code, including questions like how to debug JavaScript code, you will need to resolve yourself.
You will definitely need to familiar yourself with JavaScript code and also work out your logic first. There are obvious problems in your code:
1. There is no InvokeFunction in JavaScript. This is a .NET function on our .NET objects. It does not exist in JavaScript; 2. I am not sure how you can "click" ALL the links ---- because as soon as you click the first link in the page, the page will immediately redirect to another page. This means from this moment everything in the original page (for example, the remaining 9 links of all the 10 links) will no longer be valid;
So you definitely need to work out those first.
Thanks!
|
|
Rank: Newbie Groups: Member
Joined: 2/14/2020 Posts: 7
|
I see/understand, thanks :) To point 2. My example "class=\"XYZ\"" would be only one time found on this page, but it was anyway just a test code to see if I get it running. Ofc I would simply add a "break;" even if it is not needed, at least not in my case. I dont want to bother/take to much time of you hehe. Is there a C# only or a less JavaScipt way? If yes where can I find sample codes? Ofc it would be to time consuming if you help everyone with the code, but where are the samples then? I can google it bcs it "ur" own code. Mybe I didn't see something usefull in the docs? Also I found this on this forum:
Code: C#
EO.WebBrowser.DOM.Element[] elems =
webControl1.WebView.GetDOMWindow().document.getElementsByTagName("a");
foreach (EO.WebBrowser.DOM.Element elem in elems)
{
....
}
But it seems that this code also isn't the right for me :/
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,218
|
I am not sure what else we can tell you. You need to do this with JavaScript. You keep ignoring that and trying to find a way around it. There is no point for us to support you if you don't follow what we tell you.
|
|