所以,我一直试图让我的C#代码进入网页,并在这里抓取一些东西是C#代码我试过这个:
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("mywebsite.com/versioncheck.php?version=" + version"&key="+ key.Text"");
webBrowser1.DocumentCompleted += VersionCheck;
}
private void VersionCheck(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.DocumentCompleted -= VersionCheck;
if (webBrowser1.DocumentText.Contains("newversion"))
{
MessageBox.Show("Theres a new version ready to download!");
}
}
但我无法使用我的PHP代码来实现它:
$version = "2.0";
if($_GET["version"] == $version) {
echo "nonew";
} else {
echo "newversion";
}
我试图获取C#代码转到mywebsite.com/versioncheck.php?version=XX&key=XXXXXXXXX,然后检查网站上的单词,但现在我的c#代码只返回错误我
答案 0 :(得分:3)
也许如果您真的打扰阅读这些错误:
[..snip..] + version"&key="+ key. [..snip..]
^---huh?
您错过了+
。
答案 1 :(得分:2)
这很简单,您就在附近,可以在 DocumentCompleted 处理程序
中删除此代码段注意:您不能使用 GetElementsByName 来触发您的提交按钮,因为它没有名称属性或ID属性
var radioClick = webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("chosen").OfType<HtmlElement>()
.Where(x => x.Id == "a2").FirstOrDefault()
.InvokeMember("Click");
var buttonClick = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("submit") && html.GetAttribute("value").Equals("Next")).FirstOrDefault()
.InvokeMember("Click");
我正在尝试让我的webbrowser1单击/选择一个单选按钮,然后单击 只需单击没有任何ID或名称的提交按钮。
但是您的HTML似乎有一个ID和名称(除了Button之外),不过我们可以使用元素的GetAttribute(“ value”)
var radioBoxValue = "1";
var submitButtonValue = "Next";
//Click Radio Box
var findRadioBox = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("radio") && html.GetAttribute("value").Equals(radioBoxValue)).FirstOrDefault();
findRadioBox.InvokeMember("Click");
//Click Button
var findsubmitButton = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("submit") && html.GetAttribute("value").Equals(submitButtonValue)).FirstOrDefault();
findsubmitButton.InvokeMember("Click");
//Unsubscribing from the document completed event, there are times when you will run into situations where documentcompelted will fire multiple times
webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted;
完整代码段
private async void button1_Click(object sender, EventArgs e)
{
string url = @"https://localhost:5001/Home/Index";
webBrowser1.AllowNavigation = true;
webBrowser1.Navigate(url);
this.webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
private async void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var radioBoxValue = "1";
var submitButtonValue = "Next";
//Click Radio Box
var findRadioBox = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("radio") && html.GetAttribute("value").Equals(radioBoxValue)).FirstOrDefault();
findRadioBox.InvokeMember("Click");
//Click Button
var findsubmitButton = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("submit") && html.GetAttribute("value").Equals(submitButtonValue)).FirstOrDefault();
findsubmitButton.InvokeMember("Click");
//Unsubscribing from the document completed event, there are times when you will run into situations where documentcompelted will fire multiple times
webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted;
}
答案 2 :(得分:0)
您的单选按钮具有<video controls="" autoplay="" name="media"><source src="https://storage.googleapis.com/plataforma-redacao/1583013110538y2mate.com%20-%20OZZY%20OSBOURNE%20-%20Under%20The%20Graveyard%20%28Official%20Audio%29_fMAAMfHgO4Q_720p.mp4?GoogleAccessId=plataforma-redacao%40redacao-269717.iam.gserviceaccount.com&Expires=1583025155&Signature=bScPwZkEhJVjt8mEQMT0BeE8CdQLoqPb5CrxLd%2BLUTd%2BF6ypL3eNVe3oGSxiRM4nWpfESlA32PgsrQ417%2FZrWuT%2FxZoeyQmSxW0G4ksZjG%2FNWBnsMGBRP7D6a2nJsuS%2BYy82anismfaBKtKEhTRhF6EehC3YRQD5BqgeJ8Q4yU3u9IeI9WWwr8aeQJUt2PafWiNADGz9rk4hR%2BdWl3SHR5sj9fZf6k8%2BSyW3ZKPsd%2BzGGrX6QhpkKYXCxf%2FioedEClbFriWKYfKhpZGvkSdmYSv9ZHHUD0%2ByjiXRHWZrO8QOvIQd2kUDATC%2B6EARuHk0jcQmapOAkm2S4k6rwwolbg%3D%3D" type="video/mp4"></video>
属性,您可以选择使用id
查找它们。同样,要按名称获取元素,您可以使用GetElementById
。
但是,假设您要根据其他条件(例如,基于GetElementByName
或value
属性来查找元素,则可以通过type
获取元素集合或通过得到Document.GetElementByTagName
,要应用更多过滤器,您可以使用Document.All
将集合强制转换为IEnumerable<HtmlElement>
,然后使用linq过滤结果。
您应该在文档完成后尝试查找元素,通常应将代码放入Cast<HtmlElement>
事件处理程序中。在某些情况下,例如,当页面使用ajax请求加载时,您需要稍等片刻才能使页面加载。
示例-单击单选按钮并提交
DocumentCompletet