背景,最近再搞支付宝网页自动支付,之前找了一个方法用js 查找元素,获取位置然后自动点击。但是有点繁琐啊。不过比较精简方便一点。
之前就听过Selenium ,自动化的神器,以前就有想法想搞一个,正好可以借此机会学习学习
准备 Selenium.CefSharp.Driver 地址 Codeer-Software/Selenium.CefSharp.Driver (github.com)
这个库根据官方的demo,发现只能附加到其他进程,没找到附加到自己进程的方法,刚开始研究的不深入,后续继续深入研究。
准备俩个程序,一个主程序、一个目标程序,主程序 控制目标程序。
目标程序 注意 UIForm 类 大家用的时候改一下就行,改成原来的,我这个是第三方控件库
public partial class Form1 : UIForm
{
private ChromiumWebBrowser AccountChromeBrowser;
private RequestContext AccountContext;
private string url;
public bool IsLoadEnded { get; set; }
public Form1(string url)
{
this.url = url;
InitializeComponent();
InitializeAccountChromium();
}
//初始化浏览器并启动
public void InitializeAccountChromium()
{
AccountContext = new RequestContext(new RequestContextSettings()
{
CachePath = AppDomain.CurrentDomain.BaseDirectory + "caches\\global1\\",
PersistSessionCookies = true,
PersistUserPreferences = true
});
AccountChromeBrowser = new ChromiumWebBrowser(this.url, AccountContext);
BrowserSettings browserSettings = new BrowserSettings();
browserSettings.ApplicationCache = CefState.Enabled;
AccountChromeBrowser.KeyboardHandler = new CEFKeyBoardHander();
AccountChromeBrowser.BrowserSettings = browserSettings;
this.Controls.Add(AccountChromeBrowser);
AccountChromeBrowser.Dock = DockStyle.Fill;
AccountChromeBrowser.FrameLoadEnd += (_, __) => IsLoadEnded = true;
}
}
主程序就很不贴代码了,贴一下主要代码
//这个是我再按钮单击方法调用的,自己加到自己需要的逻辑里
var driver = GetDriver("https://mapi.alipay.com/gateway.do?service=alipay.wap.create........................");
try
{
var zhifuButton = By.XPath("//*[@id=\"cashierPreConfirm\"]/div[2]/button");
driver.FindElement(zhifuButton).Click();
var payInput = By.XPath("//*[@id=\"pwd_unencrypt\"]");
driver.FindElement(payInput).SendKeys("12345");
}
catch (Exception)
{
}
//
private CefSharpDriver GetDriver(string url)
{
string processPath = AppDomain.CurrentDomain.BaseDirectory + "AutoPay.exe";
var process = Process.Start(processPath, url);
var _app = new WindowsAppFriend(process);
var main = _app.WaitForIdentifyFromWindowText("自动支付");
while (!(bool)main.Dynamic().IsLoadEnded)
{
Thread.Sleep(500);
}
//create driver.
return new CefSharpDriver(main.Dynamic().AccountChromeBrowser);
}
以上代码基本就是核心了,几行代码轻松实现支付宝自动化支付 当然这是很简单的demo了