using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
// Requires reference to WebDriver.Support.dll
using OpenQA.Selenium.Support.UI;
class GoogleSuggest
{
static void Main(string[] args)
{
// Create a new instance of the Firefox driver.
// Note that it is wrapped in a using clause so that the browser is closed
// and the webdriver is disposed (even in the face of exceptions).
// Also note that the remainder of the code relies on the interface,
// not the implementation.
// Further note that other drivers (InternetExplorerDriver,
// ChromeDriver, etc.) will require further configuration
// before this example will work. See the wiki pages for the
// individual drivers at http://code.google.com/p/selenium/wiki
// for further information.
using (IWebDriver driver = new FirefoxDriver())
{
//Notice navigation is slightly different than the Java version
//This is because 'get' is a keyword in C#
driver.Navigate().GoToUrl("http://www.google.com/");
// Find the text input element by its name
IWebElement query = driver.FindElement(By.Name("q"));
// Enter something to search for
query.SendKeys("Cheese");
// Now submit the form. WebDriver will find the form for us from the element
query.Submit();
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(d => d.Title.StartsWith("cheese", StringComparison.OrdinalIgnoreCase));
// Should see: "Cheese - Google Search" (for an English locale)
Console.WriteLine("Page title is: " + driver.Title);
}
}
}
нужно использовать сторонние браузеры и в проэкт качать доп.библиотеки для поддержки нужного браузера
Не умеет работать с внешними окнами. Например с системным окном аутентификации на сервер (с версии 3.4 умеет). Или с окнами Open/Save file (для этого есть костыли а так же я написал полууниверсальное решение: https://github.com/ukushu/DialogCapabilities )
Плюсы
На нем вполне можно проходить ReCapcha. При помощи юзера, правда :)
谷歌在控制台
我将向您展示一个允许您直接在控制台中使用 google 的程序示例(提取google.com上的第一个标题搜索链接):
前期工作
使用 CefSharp,一个基于 Chromium 的包装库。this answer 对此进行了非常详细的描述。只需通过 Nuget 包安装。
通过从我的答案中复制这两个类 (
CefSharpWrapper和ConvertHelper),您已经有了一个框架程序,您可以使用它直接从控制台应用程序执行任何 JavaScript。也设置
x64或x86作为平台。该平台Any CPU受支持,但需要额外的代码。其他属性和方法
同样对于此任务,添加到
CefSharpWrapper属性Address:和方法
WaitTillAddressChanges:程序本身的一个例子
这是程序本身的示例(类
Program,方法Main):计划成果
例如,如果我输入“parse html C#”:
阿贾克斯
使用此库处理 AJAX也非常方便。
我找到了一个有趣的库
Selenium,通过驱动程序,您可以使用它与真实的浏览器进行交互。非常容易管理:但是,我仍然想知道如何使用标准的 .NET 工具来做到这一点。
如果您只需要对站点的某些众所周知的部分进行编码,您可以简单地提取浏览器发送的必要请求(您可以在浏览器开发人员控制台中隔离它们,通常在网络选项卡上)并发送在程序中请求,例如通过
HttpClient.如果最初你不知道请求本身(你需要在程序本身中动态接收它们),那么事件可以有 2 个选项:
<form>并从它开始。它有一个action包含路径的属性和一个指定编码格式的编码属性(如果没有,默认是“application/x-www-form-urlencoded”,看起来,虽然通过开发者控制台查看肯定更好)。您收集所有这些,包括标签内的参数<form>,将其发送HttpClient并获得响应但在大多数情况下,通常使用自己的参数发送预先准备好的(隔离的)请求就足够了。
您还可以绑定到
HttpClient'yHttpClientHandler以存储 cookie 和其他好东西。例如,您需要在某个时间向墙上添加一个帖子——算法将如下所示:
HttpClient附上HttpClientHandler'om创建HttpResponseMessage,以便我们收到 cookie这完全取决于您的需求和网站:
原则上,如果我们总结下面提供的所有信息并得出最普遍的答案:
一个。如果您需要最快的“一次性”解决方案并且速度并不重要 - 那么 Selenium
b. 如果是测试任务 - Selenium
在。如果您需要一个通用的解决方案和最简单的长期支持,无论编码需要多长时间:
如果您只需要解析数据 - AngleSharp。没有 htmlAgrilityPack。
有关每种方法的更多详细信息....
网页浏览器
减
优点
+?理论上可以跨平台,但不确定。
直接通过 HttpWebRequest Post/Get 请求进行后续解析。所需的序列可以在浏览器开发人员控制台的“网络”选项卡上找到。建议不要使用低级请求,而是使用一些用于 REST 请求的库。写代码会快很多。
减
优点
Selenium - 一般来说,它是专门为网站的自动化测试而设计的。包括 Ajax 技术。也就是说,它几乎可以完成人们在浏览器中可以执行的所有操作:查找网站界面元素、向其发送按钮点击、滚动、截屏、检查可见性/可访问性等。因为 指定了 C# 标签,也有人说没有额外的窗口,你需要使用一堆:Selenium Web-Driver 和 PhantomJS。Phantom 是一款基于类 chrome 引擎的无 UI 浏览器。它可以像一个简单的浏览器一样做所有事情,只是它不在视觉上显示并且不在渲染上浪费资源。减
Плюсы
Не уверен
? понятия не имею по поводу кросплатформенности
Оболочки вокруг готового движка вроде Хромиума. За пример - CefSharp.
Минуса
Плюса
Не уверен:
? понятия не имею по поводу кросплатформенности. Скорее всего есть
AngleSharp 是一个很棒的东西,但它专为解析而设计。他出色地完成了自己的任务。
指定如何处理在站点字段中输入的文本?该站点是否发送 GET/POST 或以不同方式处理它?
我将对 googl 和 GET 的示例给出我的想法。如果我们可以直接发送请求、获取结果并进一步解析,为什么我们需要模拟网站上的用户操作
然后我们从变量中提取
response所需的一切问题的标题是控制台应用程序。但是,我可以从文本中猜到
也许在浏览器中模拟用户操作适合您。关于浏览器中的仿真:
通过编写您自己的浏览器扩展(例如 Firefox/GoogleChrome)可以非常准确地模拟用户操作——这与真实用户没有区别。该插件可以完全拦截控制——例如,打开带有特定站点的选项卡,并“捕获”它。
在插件内部,正在开发一个特定的实体,它可以模拟鼠标移动和对象之间的点击:选择来自另一个站点的对象本身,例如,使用简单的 jQuery - 就像在任何站点的代码中一样。此外,实体需要添加在任何字段中模拟文本输入的能力。
可以通过发送受信任的 DOM 事件(插件中的代码可以做到这一点)来完成模拟,或者您可以直接使用 WinApi 及其 PostMessageW(至少 Firefox 插件可以连接任何 dll,然后从 JS 使用它)——一种钢筋混凝土方法。一般来说,从技术上讲,这样的模拟器是无法与用户区分开来的。
著名的插件Greasemonkey 因此类活动而入狱 。但是如果仿真的规模很大(在某些页面添加某些脚本的策略是不够的),我不推荐它,因为它的逻辑不够。
如果您需要从控制台向仿真添加浏览器控件,请使用 selenium。如果您希望它全部从标准服务器运行(即没有 GUI),这将不起作用。但在我的实践中,我会说我们经常使用模拟器,因为我们有单独的服务器和 Windows,带有 GUI。没有 GUI,只有一个控制台,有人认为高质量的仿真是行不通的。
此类模拟器的经典用途是解析器机器人、垃圾邮件发送者机器人、游戏机器人、您自己站点的自动测试。
等待。
例子: