python的selenium模块非常好用,用在内部web网页系统获取数据和自动操作非常方便,于是在想delphi有没有selenium可用,找了一下,在github真的发现有.
网址: https://github.com/Ericwang1104/WebDriver4D
下载下来了后,加入delphi的搜索路径就可以用.
在delphi 10.4的操作就是打开菜单 tools => option => language => delphi => library => library path , 加WebDriver4D目录就可以了,默认是win32bit版本的,其它win64bit也要这样添加,然后就代码里引用库就可以了, WebDriver4D里边有例子.
以下是操作代码,是一个控制台程序.
program liulanqi2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,WD_http ,WebDriver4D,wd_httpDelphi;
var
//bmp2:Tbitmap; uses Vcl.Graphics
WD: TWebDriver;
Ele, Ele1: TWebElement;
Ele2: TWebElements;
xxx:string;
//FCMD: TDelphiCommand;
begin
WD := TChromeDriver.Create(nil);
//bmp2:= Tbitmap.Create;
//WD := TPhantomjs.Create(nil);
//FCMD:= TDelphiCommand.Create(nil);;
try
try
WD.Address := 'localhost';
//WD.Port := 7777;
//Webdriver4D.pas chrome --headless 无头模式 ,大概1476行
// +'"args": []}}},' //正常模式
//+ ' "args": ["--headless","--disable-gpu"]}}},' // hidden mode
WD.StartDriver('D:/Anaconda3/chromedriver.exe');//路径正确
//WD.StartDriver('D:/tools/delphi/WebDriver4D-master/WebDriver/phantomjs.exe');//路径正确
//WD.Path :='';
//WD.Cmd:= FCMD;
//WD.Canshu:= '--headless';
Sleep(500);
WD.NewSession;
WD.GetURL('https://www.lpfrx.com');
//WD.SwitchToFrame('x-URS-iframe');
Sleep(3000);
Ele := WD.FindElementByXPath('//*[@id="s"]');
//Sleep(5000);
//定位搜索框,滚动画面 document.evaluat 可以用xpath定位
WD.ExecuteScript('document.evaluate("//*[@id=''s'']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView();');
Ele.Click;
//WD.ExecuteScript('document.getElementsByTagName("input")[0].scrollIntoView();');
Sleep(1000);
Ele.SendKey('delphi');
Ele1 := WD.FindElementByXPath('//*[@id="searchsubmit"]');
WD.ExecuteScript('document.evaluate("//*[@id=''searchsubmit'']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView();');
Sleep(2000);
Ele1.Click;
Writeln('hello world'); //输出一句话
Sleep(1200);
// html title
//xxx := WD.ExecuteScript('return document.title');
// 截图
WD.ScreenShot('./s.bmp');
// html body text
xxx := WD.ExecuteScript('return document.body.innerText');
Writeln(xxx);
Ele2 := WD.FindElementsByXPath('//*[@id="s"]');
Writeln('Ele2 搜索框数量:'+ inttostr(Ele2.Count));
//Writeln(wd.ExecuteScript('return document.title'));
Sleep(5000);
wd.Quit;
finally
FreeAndNil(WD);
//FreeAndNil(FCMD);
//bmp2.Free;
end;
{ TODO -oUser -cConsole Main : Insert code here }
except
on E: Exception do
Writeln(E.ClassName, ‘: ‘, E.Message);
end;
end.
整体跟python版操作差不多, 其实说到底seleium操作原理就是程序发送http json到chromedriver.exe程序操作,可以网上去看看selenium操作原理.