delphi版的 selenium测试

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操作原理.

发表在 delphi | 留下评论

用红米AX6发射信号红米ac2100中继

最近家里的网络结构调整了一下, 用红米AX6发射信号红米ac2100中继, 红米AX6是自编译的openwrt固件5.10.78,主路由,红米ac2100是padavan老毛子。

把红米ac2100的位置移动到家的中心点附近,这样的wifi信号覆盖比原先好很多,以前是2.4G,, 现在5G基本由它作覆盖, 2.4G无线给智能电器用,例如天猫精灵和小爱同学,还有那些wifi插座等等.

终于是5G覆盖了, 而且也支持160MHz的, 哎, 终于折腾完毕.

但现在还是心痒,因为从网上拆机文来看,红米ac2100的5G部分,负责的MT7615N没有接外置功放的,想找部有功放的,所以才心痒,dir882这部也是可以刷老毛子的,但也想找部高通的wdr8500 V1折腾,这个也是有功放的,因为之前买了刷openwrt的wdr7500 v3在现在主路由那个位置,5G信号比AX6好昵,而且比dir882便宜,看看我几时忍不住又买回来玩玩。

但自己有太多路由了,还有就是我家其实不大的,现在的组合也非常不错了。

其实不追求5G的话,用最便宜的wr880n v1就得了,2.4G无敌,不过最少刷openwrt, 要4.9以上内核的.

或者增加一部mt7621的路由作主路由,然后2.4G用wr88n作ap , 这种组合比较好.

穷玩路由,有钱玩女人玩车玩房子,呜呜呜…..

发表在 openwrt | 留下评论

REDMI红米ac2100刷了老毛子Padavan的固件

REDMI红米ac2100刷了老毛子的固件, 昨晚第一次刷老毛子的固件,看起来非常简洁,但第一次玩老毛子固件,非常陌生,最熟当然是openwrt了.

为什么刷老毛Padavan固件,玩路由器,当然什么固件都要试试,这当然是废话。

REDMI红米ac2100是MTK7621的cpu , 5G无线是7615N .

之前我的REDMI红米ac2100刷的都是自编译openwrt固件 , 或恩山的各位大神的固件, 测试无线5G时,无论用作802.11s的mesh网络,和作为ap的client连接,连接我新入手败家的红米ax6高通方案的openwrt的,上行时,最高速率都是355K/S , 上行根本无法传输,但和我的新三newifi-D2的5G无线(也是MTK方案) ,上行和下行传输都没问题.

这是MTK和高通的无线不兼容吗?? 但昨晚刷了老毛子Padavan的固件后,居然和红米AX6的高通5G连通了,上行传输文件偶尔还能达到100M/s(千兆网络)极限, 看来还是MTK无线芯片驱动的问题,好神奇啊.

REDMI红米ac2100老毛子Padavan的固件, 在恩山论坛哪里有.

最近还入手75元淘宝买的wdr7500 v3版,焊了TTL插针,刷了openwrt , 和redmi红米ax6作为ap client连接, 传输文件,在隔一道墙的情况下,局域网共享复制文件,上行和下行传输都可以达到50M/s左右,

以上就是最近折腾路由有关openwrt的破事了.

发表在 openwrt | 留下评论

iptables的udp负载均衡记录

iptables的udp负载均衡记录, 最近才学习这些东西,尝试kcptun的随机端口测试用。

客户端client:

iptables -t nat -A OUTPUT -p udp –dport 4444 -m state –state NEW -m statistic –mode nth –every 4 –packet 0 -j DNAT –to-destination 127.0.0.1:1444

iptables -t nat -A OUTPUT -p udp –dport 4444 -m state –state NEW -m statistic –mode nth –every 4 –packet 1 -j DNAT –to-destination 127.0.0.1:1445

iptables -t nat -A OUTPUT -p udp –dport 4444 -m state –state NEW -m statistic –mode nth –every 4 –packet 2 -j DNAT –to-destination 127.0.0.1:1446

iptables -t nat -A OUTPUT -p udp –dport 4444 -m state –state NEW -m statistic –mode nth –every 4 –packet 3 -j DNAT –to-destination 127.0.0.1:1447

服务端server:

iptables -t nat -A OUTPUT -p udp –dport 1445:1447 -j DNAT –to-destination 127.0.0.1:5555

另外要kcptun客户端需要设置:

“conn”: 4,
“autoexpire”: 0,

kcptun要设置端口到4444去

kcptun server端要设置端口到5555去

发表在 技术生活 | 留下评论

记录下DOS批处理和Linux的bash的date函数格式

记录下DOS批处理和Linux的bash的date函数格式

DOS批处理时间函数格式 : %Date:~0,4%%Date:~5,2%%Date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

echo %Date:~0,4%%Date:~5,2%%Date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

以当前时间为例,输出: 20210611152010 , 既是2021-06-11 15:20:10

Linux下的bash就简单了: $(date ‘+%Y%m%d%H%M%S’)

echo $(date ‘+%Y%m%d%H%M%S’)

结果也是20210611152010

发表在 shell | 留下评论

kcptun用在局域网上

kcptun用在局域网上 , 一般这货是用在外网的,但面对公司内部找不出那个网络交换接点有延时问题,于是就用上了kcptun这暴力发包工具了。

公司内网很多交换机,很多光纤收发器,不过道闸系统到服务器哪里,ping值总会有丢包数据,但不严重,已经查过了很多网络线路,但始终找不出原因,于是尝试这个kcptun工具,把道闸服务器上的sql server的1433tcp端口映射到kcptun端口上,例如·6666,岗亭的监控端也装上kcptun客户端,连接本地1433端口,通过kcptun客户端连接到服务端的6666端口上,这样系统的稳定和速度上比原来的好很多,用了一段时间感觉非常稳定。

其实在使用kcptun用在内部局域网上时,我在去检修过内网的线路,但始终查不到原因,有可能连接的光纤老化吧,反正现在用着kcptun连接稳定,暂时不理着吧。

至于kcptun的参数设置,就是官网默认的那个,先记录到这里吧。

发表在 技术生活 | 留下评论